Shell

for循環評估多個目錄並執行命令

  • April 26, 2016

我正在編輯一個 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 */*它並且它會工作 - 它可能包含您不想列出的其他一些目錄(或文件),這取決於您保持這些目錄的干淨程度(整潔) .

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