使用 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/sis 在find的搜尋路徑中,find正在列出文件,而產生的cps 正在新增文件。

您必須在運行時排除子目錄find

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

請注意,替換\;+將產生更少的cp進度。

相關內容