シェルスクリプトを編集していますが、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 {} \;
-maxdepth
GNU拡張です-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 */*
機能することもできます。どれだけきれいに保つかによって、リストしたくない他のディレクトリ(またはファイル)が含まれる場合があります。ディレクトリの学位。