Как избежать предупреждения о "том же файле" при использовании 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' являются тем же файлом
Как избежать этого предупреждения?
Ответы
Ответ 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