シェルスクリプトの特定のディレクトリにあるファイルとディレクトリの数

シェルスクリプトの特定のディレクトリにあるファイルとディレクトリの数

私はLinuxを使用していますが、それは私にとって新しいものです。シェルスクリプトを作成しましたcountfiledirs。特定のディレクトリにあるファイルとディレクトリの数を知りたいです。

私のコードは次のとおりです

#!/bin/bash
echo "total directories:" `find . -type d | wc -l`

echo "total files:" `find . -type f | wc -l`

このコマンドを実行すると、次のように表示されます。./countfiledirs

total directories: 148
total files: 255 

このコマンドを使用すると、どのくらいのディレクトリとファイルがあるかを知りたいと思います./countfiledirs /usr/share

ベストアンサー1

wc -lファイルとディレクトリの名前には改行文字を含めることができるため、今のように「ただ」使用することはできません。

引数を受け入れ、ファイル数とディレクトリ数を繰り返し計算するスクリプトが必要な場合は、次のようにします。

#!/bin/bash
echo -n 'total directories:'; find "$1" -type d -printf \\n | wc -l
echo -n 'total files:';  find "$1" -type f -printf \\n | wc -l

次に、ディレクトリをコマンドライン引数として指定してスクリプトを呼び出します。

./your_script_name /home/e_g_your_home_dir.

簡単に言えば、上記はディレクトリですが(ディレクトリ自体を「ディレクトリ」と見なさない限り)、wc -lNULで終わる「行」を処理し、次を使用できるものに置き換えることもできます。-print0

#!/bin/bash
echo -n 'total directories:'; find "$1" -type d -print0 | python -c "import sys; print len(sys.stdin.read().split('\0'))-2"
echo -n 'total files:';  find "$1" -type f -print0 | python -c "import sys; print len(sys.stdin.read().split('\0'))-1"

この操作を繰り返し実行したくない場合は、(指定したディレクトリのファイル/ディレクトリを計算せずに指定したディレクトリのファイル/ディレクトリのみを計算する)、引数の後に追加する必要があり-maxdepth 1ます$1

おすすめ記事