コードを強化しました質問以前に投稿したことがあります。
私のコードは次のとおりです
DIR="$1"
if [ -e "$DIR" ]
then
echo -n "total directories:" ; find $DIR -type d | wc -l
echo -n "total files:" ; find $DIR -type f | wc -l
else
if [ -f "$DIR" ]
then
echo " Directory doesn't exist"
else
echo " please pass correct arguments"
fi
fi
./countfiledirs
orを実行すると、次のコードが出力されますcountfiledirs jhfsakl
。
sreekanth@sreekanth-VirtualBox:~$ ./countfiledirs
please pass correct arguments
sreekanth@sreekanth-VirtualBox:~$ ./countfiledirs ffff
please pass correct arguments
スクリプト名を実行するときに./countfiledirs
出力したい。
please pass correct arguments
./countfiledirs ffff
次の場合:
directory doesn't exists
スクリプトを実行すると、コードに別の問題があります./countfiledirs /usr/share
。私が提供したパスの実際のディレクトリとサブディレクトリの数は提供されません。 3つの代わりに4つのディレクトリを表示
ベストアンサー1
存在する場合は真である[ -f "$DIR" ]
かどうかをテストします。$DIR
ファイルです。それはあなたが望むものではありません。前の質問で提案したように、パラメータが渡されたことを$#
確認するために使用する必要があります。その後、以下を使用して-e
パラメーターが存在することを確認できます。
次の号には現在のカタログもfind
リストされています。これを防ぐためにGNUを.
使用できます。-mindepth 1
find
DIR="$1"
if [ $# -lt 1 ]
then
echo "Please pass at least one argument" && exit
fi
if [ -e "$DIR" ]
then
echo -n "total directories:" ; find "$DIR" -mindepth 1 -type d | wc -l
echo -n "total files:" ; find $DIR -type f | wc -l
else
echo "Directory doesn't exist"
fi
上記を次のように圧縮することもできます(このバージョンはディレクトリではなく、存在しないディレクトリとファイルを区別しませんが)。
dir="$1"
[ $# -lt 1 ] && echo "Please pass at least one argument" && exit
[ -d "$dir" ] && printf "total directories: %s\ntotal files:%s\n" \
$(find "$dir" -type d | wc -l) $(find "$dir" -type f | wc -l) ||
printf "%s\n" "There is no directory named '$dir'."