我有一个关于find,prune和print结合while循环的问题。我想找到名为 trace 的每个文件,但不是找到以邮寄结尾的文件。此外,我想排除 lost + found 目录中的文件。我的想法是使用以下命令:
find /opt/myTESTdir/ -iwholename '*lost+found' -prune -o -ctime +4 -type f -iname "*trace*" -not -iname "*.mailed*" -print0 | while read file ; do newfile=${file%.txt}".mailed" ; mv -v $file $newfile ; done
我的问题是现在应该这样做还是有语法错误?我已经尝试了没有管道后面的所有内容的find命令,看起来,这是正常的。但我不确定这种组合。我希望你能回答我:)。
(抱歉我的英语不好)
答案 0 :(得分:1)
在while循环中,您似乎正在尝试将扩展名为.txt
的文件重命名为.mailed
。您可以使用-exec
选项实现相同的目标。
尝试在find命令的末尾添加以下部分,并删除while循环的管道。
-exec sh -c 'mv -f $0 ${0%.txt}.mailed' {} \;
完整的命令看起来像
find /opt/myTESTdir/ -iwholename '*lost+found' -prune -o -ctime +4 -type f -iname '*trace*' ! -iname '*.mailed*' -exec sh -c 'mv -f $0 ${0%.txt}.mailed' {} \;