私は bash スクリプトを学習しており、引数として指定されたディレクトリ内のファイルとディレクトリをカウントするスクリプトを作成しました。私には奇妙に思える1つの方法で動作していて、もっと簡単な方法があるかどうか疑問に思っています.
動作するコードをコメントアウトしましたが、比較のために残しました。指定された場所にあるアイテムがファイルまたはディレクトリであるかどうかを検出するために、ループ内のステートメントをfor
使用する代わりに、ループを機能させようとしています。if
編集:コメント付きのコードが、指定された場所のサブディレクトリ内のすべてのファイルとディレクトリもカウントすることがわかりました! これを防ぎ、指定された場所のファイルとディレクトリを数えるだけの方法はありますか?
#!/bin/bash
LOCATION=$1
FILECOUNT=0
DIRCOUNT=0
if [ "$#" -lt "1" ]
then
echo "Usage: ./test2.sh <directory>"
exit 0
fi
#DIRS=$(find $LOCATION -type d)
#FILES=$(find $LOCATION -type f)
#for d in $DIRS
#do
# DIRCOUNT=$[$DIRCOUNT+1]
#done
#for f in $FILES
#do
# FILECOUNT=$[$FILECOUNT+1]
#done
for item in $LOCATION
do
if [ -f "$item" ]
then
FILECOUNT=$[$FILECOUNT+1]
elif [ -d "$item" ]
then
DIRCOUNT=$[$DIRCOUNT+1]
fi
done
echo "File count: " $FILECOUNT
echo "Directory count: " $DIRCOUNT
何らかの理由でfor
、場所をどこに指定しても、ループの出力は常に次のように返されます。
File count: 0 , Directory count: 1