
我需要移動兩個特定文件,我們將它們稱為 fileA.txt 和 fileB.sh 到其父資料夾中。
其中一個檔案是通用的,但另一個檔案特定於其父資料夾,無法複製到所有資料夾。
資料夾層次結構如下:資料夾層次結構
父資料夾是唯一的且必須保持不變。總共有 2000 多個資料夾,位於包含子資料夾的 200-300 個父資料夾的子資料夾中
到目前為止,我在 BASH 中不起作用的是:
find -maxdepth 4 -type f -name ‘*.bb’ ‘*.txt’; mv ../.
我對腳本編寫非常陌生,我知道這是一項非常簡單的任務。我為這張糟糕的圖畫道歉,但我已經把頭撞在牆上太久了。
答案1
若要將任何名為fileA.txt
或 的檔案移至fileB.txt
其直接父目錄:
find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;
或者,將任何名為fileA.txt
或 的檔案移至fileB.bb
其直接父目錄:
find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;
怎麼運作的
.
告訴find
從當前目錄開始。 (您可以將其替換為您喜歡的任何目錄。-maxdepth 4
告訴find
不要深入目錄結構超過四層。-type f
告訴find
只查找常規文件。-name 'file[AB].txt'
告訴find
只查找與 glob 相符的檔案file[AB].txt
。或者,為了匹配
fileA.txt
orfileB.bb
,我們使用兩個-name
測試與邏輯或 (-o
) 組合併用括號分組在一起:\( -name 'fileA.txt' -o -name 'fileB.bb' \)
-execdir mv {} ../ \;
告訴find
chdir 到檔案的目錄並執行 shell 命令,mv {} ../
其中find
將替換{}
為檔案的實際名稱。這個表達式../
是 Unix 中父目錄的說法。尾隨\;
僅標記find
shell 指令的結束