Почему моя команда find выполняется дважды?

Я хочу получить определенные файлы, а затем cp результат в другой каталог. Все работает, но моя команда, кажется, выполняется второй раз.

Например, у меня есть файл a и я хочу cp его в поддиректорию test/, поэтому я запускаю:

find . -mtime -1 -name a -exec cp {} test/ ';'

Мой файл копируется в поддиректорию так, как я хотел, но потом получаю сообщение об ошибке:

cp: './test/a' and 'test/a' are the same file
6
задан 20 September 2020 в 14:02

1 ответ

У вас есть состояние гонки - сначала find находит ./a и копирует его в test/a, затем находит новый скопировал ./test/a и пытается скопировать его снова:

$ find . -mtime -1 -name a -print -exec cp -v {} test/ ';'
./a
'./a' -> 'test/a'
./test/a
cp: './test/a' and 'test/a' are the same file

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

find . -path ./test -prune -o -mtime -1 -name a -exec cp {} test/ ';'
15
ответ дан 19 September 2020 в 14:06

Другие вопросы по тегам:

Похожие вопросы: