Find

使用 find、exec 和 cp 複製特定文件,同時保留目錄路徑

  • January 16, 2020

我使用空文本文件設置了以下文件夾:

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/sis infind的搜尋路徑,find正在列出文件,而生成cp的 s 正在添加新文件。

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

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

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

引用自:https://serverfault.com/questions/999276