使用 find、exec 和 cp 复制特定文件同时保留目录路径

使用 find、exec 和 cp 复制特定文件同时保留目录路径

我用空文本文件设置了以下文件夹:

1/a.txt
2/b.txt

我想仅将 txt 文件复制到另一个目录,同时保留其目录结构。因此,我尝试了以下命令:

mkdir -p temp/s;
find ./ -name '*txt' -exec cp --parents '{}' ./temp/s \;

现在我在当前目录中看到以下文件:

1/a.txt
2/b.txt
temp/s/1/a.txt
temp/s/2/b.txt
temp/s/temp/s/2/b.txt

我不明白为什么temp/s/temp/s/2/b.txt会出现最后一行。有人能向我解释为什么会发生这种情况吗?我该如何修复我的命令,使它temp不嵌套在另一个命令中temp

这是我期望的最终结果:

1/a.txt
2/b.txt
temp/s/1/a.txt
temp/s/2/b.txt

答案1

你有一个竞争条件:由于位于的搜索路径temp/s中,所以正在列出文件,而生成的正在添加新文件。findfindcp

您必须在运行时排除子目录find

find . -path ./temp/s -prune -o -name '*txt' -exec cp --parents '{}' ./temp/s \;

请注意,替换\;+产生更少的cp进​​程。

相关内容