2013-10-29 70 views
0

我有一個關於find,prune和print結合while循環的問題。我希望找到每個文件名爲跟蹤但不是以郵件郵件結尾的文件。另外我想排除中丟失的文件+找到目錄。我的想法是使用下面的命令:如何在while循環中使用find和prune選項

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

最起碼,你不能混用'-print0'與常規'read'其預計新行終止的輸入,而不是零終止。 – tripleee

回答

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

因此我還需要'-print0'選項嗎? – Marcusg562

+0

@ Marcusg562不,你不需要它。我已經用完整的命令更新了答案。 – jkshah

+0

非常感謝:) – Marcusg562