Regex 如何在while循环中使用find和prune选项

Regex 如何在while循环中使用find和prune选项,regex,while-loop,find,rename,pruning,Regex,While Loop,Find,Rename,Pruning,我有一个关于查找、修剪和打印以及while循环的问题。我想找到每个名为trace的文件,但不是以邮件结尾的文件。我还想排除lost+found目录中的文件。我的想法是使用以下命令: find/opt/myTESTdir/-iwholename'*lost+found'-prune-o-ctime+4-type f-iname“*trace*”-not-iname“*.mailed*”-print0 |读取文件时;do newfile=${file%.txt}.mailed”;mv-v$file$

我有一个关于查找、修剪和打印以及while循环的问题。我想找到每个名为trace的文件,但不是以邮件结尾的文件。我还想排除lost+found目录中的文件。我的想法是使用以下命令:

find/opt/myTESTdir/-iwholename'*lost+found'-prune-o-ctime+4-type f-iname“*trace*”-not-iname“*.mailed*”-print0 |读取文件时;do newfile=${file%.txt}.mailed”;mv-v$file$newfile;完成

我现在的问题是,这是可行的还是有语法错误?我已经尝试了find命令,但管道后面没有任何东西,而且看起来,这是正确的。但我不确定这个组合。我希望你能回答我:)


(抱歉我的英语不好)

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

因此,我是否也需要
-print0
选项?@Marcusg562不,您不需要它。我已经用full命令更新了ans。至少,您不能将
-print0
与常规
读取混用,后者需要换行终止输入,而不是以零终止输入。