Подтвердить что ты не робот

Как избежать предупреждения о "том же файле" при использовании cp в Linux?

Я пытаюсь скопировать определенные файлы из одного каталога в другой. Используя эту команду

find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -t $HOME/newdir

Появляется предупреждающее сообщение

cp: '/home/me/newdir/logfile.txt' и '/home/me/newdir/logfile.txt' являются тем же файлом

Как избежать этого предупреждения?

4b9b3361

Ответ 1

Проблема заключается в том, что вы пытаетесь скопировать файл в себя. Вы можете избежать этого, исключив целевой каталог из результатов команды find следующим образом:

find "$HOME" -name '*.txt' -type f -not -path "$HOME/newdir/*" -print0 | xargs -0 cp -t "$HOME/newdir" 

Ответ 2

Сделайте это уникальным в этом процессе. Но для этого требуется сортировка

find "$HOME" -name '*.txt' -type f -print0 | sort -zu | xargs -0 cp -t "$HOME/newdir"

Или если это не о сгенерированных файлах, попробуйте использовать -u вариант cp.

find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -ut "$HOME/newdir"
-u   copy only when the SOURCE file is newer than the destination file or when
     the destination file is missing