私はこのスクリプトを使ってディレクトリとサブディレクトリのファイル数を計算します。
for i in $(find . -type d) ; do
printf "$i %s\t" ;
( find $i -type f | wc -l ) ;
done
このスクリプトはうまく動作します。私が本当に望むのは、31個以上のファイルを含むディレクトリだけを印刷することです。
答え1
努力する:
find . -type d -exec sh -c '[ $(find "$1" -type f | wc -l) -gt 31 ]' _ {} \; -print
-maxdepth
2番目の項目に制限を使用することをお勧めしますfind
。そうしないと、驚くべき結果が出る可能性があります。このコマンドは、改行文字を含む名前には機能しません。
答え2
行を変更します。
( find $i -type f | wc -l ) ;
これで:
FILES=$( find $i -type f | wc -l );
その後、次のように要求できます。
if [ "$FILES" -gt 31 ] ; then
答え3
以下を使用する必要があります-gt
。
for i in $(find . -type d) ; do
NUM=$( find $i -type f | wc -l );
if [[ $NUM -gt 31 ]]; then
echo "$i $NUM" ;
fi
done
答え4
ソリューションの活用強く打つの配列:
x=( * )
((${#x[@]} > 31)) && printf '%s\n' *