我用空文本文件设置了以下文件夹:
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
中,所以正在列出文件,而生成的正在添加新文件。find
find
cp
您必须在运行时排除子目录find
:
find . -path ./temp/s -prune -o -name '*txt' -exec cp --parents '{}' ./temp/s \;
请注意,替换\;
将+
产生更少的cp
进程。