Shell-Script

如何在相同的目錄結構之間複製具有相同副檔名的所有文件?

  • April 26, 2022

我有 2 個獨立的文件夾 A 和 B。B 有許多副檔名為.build. 跨 A 有一個 fe 子目錄,其結構與 B 的子目錄相同。

例如 A 有some_path/Tools/Camera/,B 有different_path/Tools/Camera。假設我手動辨識了 2 個子目錄,一個在 A 中,一個在 B 中,具有相同的結構,我需要將所有 .build 文件從 B 的子目錄複製到 A 中的子目錄中。

我該怎麼做?

啟用globstarBash shell 選項:shopt -s globstar

現在將目錄更改為 B 並執行:

for path in **/; do
   [ -d "<A-dir>/$path" ] && cp -n "$path/"*.build "<A-dir>/$path"
done

這將遞歸檢查 B 中的每個子目錄,並查看 A 中是否有等效的子目錄。如果有,則它將.buildB 子目錄中的所有文件複製到 A。

有很多方法可以做到這一點。

這是我想到的一個。

cd different_path
find . -iname '*.build' | while read filename ; do 
   cp -n "$filename" "some_path/${filename#./}" 
done

如果您有一些名稱不佳的文件在其名稱或類似名稱中帶有換行符,則可以改用空分隔符:

cd different_path
find . -iname '*.build' -print0 | while IFS= read -r -d $'\0' filename ; do 
   cp -n "$filename" "some_path/${filename#./}" 
done

引用自:https://unix.stackexchange.com/questions/700362