Shell
for循環評估多個目錄並執行命令
我正在編輯一個 shell 腳本,我想知道如何使用 for 來使用列表或變數列出的所有目錄,然後執行命令。
例子:
我有這個目錄:
/dirname1/app1 /dirname1/app2 /dirname2/app1 /dirname2/app2
問題是每個目錄都有 8 個應用程序目錄,我需要使用 du 來獲取每個目錄的值,以便使用每個目錄。
我有我製作的這段範常式式碼,但我想將它轉換得比實際更好。
#!/bin/ksh #files="/dev /etc" inc=1 for f in /*; do vari=`du -ksh $f` [ -d $f ] echo "The value of each one is: ------ : $((inc++)): $vari" done; echo "Execution Done." exit 0
我希望通過這個清除,
我的建議是保持簡單。 當有現成的工具可以滿足您的需求時,不要編寫整個腳本。
du
是報告磁碟使用情況find
的工具,也是查找文件的工具。一起使用它們。find dirname* -mindepth 1 -maxdepth 1 -type d -exec du -hs {} \;
-maxdepth
並且-mindepth
是 GNU 擴展;要便攜地處理這個問題,您需要一個稍微複雜的命令,如下所述:在這種情況下,命令將是
find dirname* -path '*/*' -prune -type d -exec du -hs {} \;
或者,如果您的所有
dirname*
目錄都在其中,topdirectory
並且沒有其他目錄,請使用:find topdirectory -path '*/*/*' -prune -type d -exec du -hs {} \;
這只會報告目錄中的目錄
topdirectory
,這似乎是您所要求的。**更新:**我又看了一遍,實際上,你可以完全用 shell globbing 做你需要的事情:
du -hs dirname*/app*/
您的目錄實際上可能不是這樣命名的,但您甚至可以執行
du -hs */*
它並且它會工作 - 它可能包含您不想列出的其他一些目錄(或文件),這取決於您保持這些目錄的干淨程度(整潔) .