31個以上のファイルを含むディレクトリのみを印刷する

31個以上のファイルを含むディレクトリのみを印刷する

私はこのスクリプトを使ってディレクトリとサブディレクトリのファイル数を計算します。

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

-maxdepth2番目の項目に制限を使用することをお勧めします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' *

関連情報