我使用空文本文件設定了以下資料夾:
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
is 在find
的搜尋路徑中,find
正在列出文件,而產生的cp
s 正在新增文件。
您必須在運行時排除子目錄find
:
find . -path ./temp/s -prune -o -name '*txt' -exec cp --parents '{}' ./temp/s \;
請注意,替換\;
為+
將產生更少的cp
進度。