Вопрос

i've got an question about find, prune and print combined with an while loop. I want find every file named trace but not the files ending on mailed. Also i want to exclude the files in the lost+found directory. My idea was to use the following command:

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

My question is now should this work or is there an syntax error? I've tried out the find command without everything behind the pipe and it seems, that's work correctly. But i'm not sure about the combination. I hope you could answer me :)

(Sorry for my bad english)

Это было полезно?

Решение

In while loop, it seems you are trying to rename files with extension .txt to .mailed. You can achieve the same using -exec option.

Try adding following portion to the end of your find command and remove piping to while loop.

-exec sh -c 'mv -f $0 ${0%.txt}.mailed' {} \;

Complete command would look like

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' {} \;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top