forループは複数のディレクトリを評価し、コマンドを実行します。

forループは複数のディレクトリを評価し、コマンドを実行します。

シェルスクリプトを編集していますが、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

この問題が明確になれば幸いです。

答え1

私のアドバイスは、物事を単純に保つことです。 必要なタスクをすでに実行している既製のツールがある場合は、スクリプト全体を作成しないでください。

duディスク使用量を報告するツールであり、ファイルを見つけるためのfindツールです。一緒に使用してください。

find dirname* -mindepth 1 -maxdepth 1 -type d -exec du -hs {} \;

-maxdepthGNU拡張です-mindepth。これを移植可能に処理するには、以下に説明するように少し複雑なコマンドが必要です。

この場合、コマンドは次のようになります。

find dirname* -path '*/*' -prune -type d -exec du -hs {} \;

または、すべてのdirname*ディレクトリがここにあり、topdirectory他のディレクトリはない場合は、次を使用してください。

find topdirectory -path '*/*/*' -prune -type d -exec du -hs {} \;

topdirectoryこれは、あなたが必要とするディレクトリ内のディレクトリのみを報告します。


修正する:もう一度見てみると、実際にシェルワイルドカードを完全に使用して必要な作業を実行できます。

du -hs dirname*/app*/

ディレクトリの名前は実際にはこのように指定されていない可能性がありますが、実行してもdu -hs */*機能することもできます。どれだけきれいに保つかによって、リストしたくない他のディレクトリ(またはファイル)が含まれる場合があります。ディレクトリの学位。

関連情報