將兩個特定檔案移至具有唯一名稱的多個目錄中的父資料夾中

將兩個特定檔案移至具有唯一名稱的多個目錄中的父資料夾中

我需要移動兩個特定文件,我們將它們稱為 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.txtor fileB.bb,我們使用兩個-name測試與邏輯或 ( -o) 組合併用括號分組在一起:

    \( -name 'fileA.txt' -o -name 'fileB.bb' \)
    
  • -execdir mv {} ../ \;告訴findchdir 到檔案的目錄並執行 shell 命令,mv {} ../其中find將替換{}為檔案的實際名稱。這個表達式../是 Unix 中父目錄的說法。尾隨\;僅標記findshell 指令的結束

相關內容