为什么我的 find 命令被执行了两次?

为什么我的 find 命令被执行了两次?

我想检索特定文件,然后将cp结果放入另一个目录。一切正常,但我的命令似乎被执行了第二次。

例如,我有一个文件a,我想将cp其放入子目录中test/,因此我运行:

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

我的文件已按需要复制到子目录中,但随后收到以下错误消息:

cp: './test/a' and 'test/a' are the same file

答案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/ ';'

相关内容