運行每個子目錄中的命令集

運行每個子目錄中的命令集

我想在目前工作目錄的每個子目錄中執行以下命令。以下是命令:

OUTPUTFN=`basename $PWD`
cat *.xml > $OUTPUTFN.txt
mv $OUTPUTFN.txt $OUTPUTFN.xml
mv $OUTPUTFN.xml ..

該目錄中有 700 多個資料夾,我希望它進入每個資料夾,執行這四個命令,然後轉到下一個,執行命令,然後重複。我嘗試將此網站中的多個範例與我的命令結合起來,但無法使其工作。

答案1

腳本

for DIR in *; do
    [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"
done

單線

for DIR in *; do [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"; done

怎麼運作的

  • Bash 擴展*到目前目錄中的所有檔案和目錄。

  • for DIR in *; do ... done遍歷這些並...為每一個執行。

    在每種情況下,$DIR都會儲存目前條目的名稱。

  • [ -d "$DIR" ] && ...檢查是否$DIR確實是目錄(而不是檔案)。

    如果是,...則被處死。

  • cat "$DIR"/*.xml > "$DIR.xml"正是您的四行程式碼所做的事情。

相關內容