Find
使用 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
您有一個競爭條件:因為
temp/s
is infind
的搜尋路徑,find
正在列出文件,而生成cp
的 s 正在添加新文件。您必須在執行時排除子目錄
find
:find . -path ./temp/s -prune -o -name '*txt' -exec cp --parents '{}' ./temp/s \;
請注意,替換
\;
為+
將產生更少的cp
程序。