如何使用find和带有while循环的prune选项

时间:2013-10-29 07:29:36

标签: regex while-loop find rename pruning

我有一个关于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命令,看起来,这是正常的。但我不确定这种组合。我希望你能回答我:)。

(抱歉我的英语不好)

1 个答案:

答案 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' {} \;