これを試して、サブディレクトリ名とそれらに含まれるファイル/ディレクトリの数を取得できます:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;
すべてのサブディレクトリ (再帰的検索) に対して同じことをしたい場合は、代わりにこれを使用してください:
find . -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;
ちょうど 10 個のファイルがあるディレクトリを選択するには:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
awk '$NF==10'
10以上:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
awk '$NF>=10'
10 以下:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
awk '$NF<=10'
ディレクトリ名のみを保持したい場合 (たとえば、@evilsoup が提案したように、ダウンストリームの別のプロセスにパイプしたい場合)、これを使用できます:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{}\t'; ls '{}' | wc -l" \; |
awk -F"\t" '$NF<=10{print $1}'
正確にを含む直下のサブディレクトリを一覧表示するには $NUM
ファイル。
find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]==num) printf "%s\n", line}'
greater を含む直下のサブディレクトリを一覧表示するには $NUM
より ファイル。
find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]>num) printf "%s\n", line}'
less を含む直下のサブディレクトリを一覧表示するには $NUM
より ファイル。
find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]<num) printf "%s\n", line}'
項目はヌル文字 \0
で終了します であるため、改行やその他の種類の空白を含むファイル名は正しく解釈されます。 %h
各ファイルの dirname
を出力します . awk
次に、配列を使用して各ディレクトリに遭遇した回数をカウントし、条件が満たされた場合に出力します。
前述のコマンドはどれも、ファイルを含まないディレクトリを表示しないことに注意してください。また、ファイルとは通常のファイルを参照していることに注意してください。ではありません リンク、ディレクトリ、ソケット、ブロック、名前付きパイプなど。
私はこれをできるだけ簡単にしようとしました。再帰的なサブディレクトリまたはその中のファイルを見つけたい場合は、変更されたコマンドが必要です。それらをすべてリストするにはあまりにも多くの可能性があります.
これを試してください:
<ブロック引用>[ `見つける。 | | wc -l` -eq 10 ] &&echo "見つかりました"
[ `見つける。 | | wc -l` -gt 10 ] &&echo "見つかりました"
[ `見つける。 | | wc -l` -lt 10 ] &&echo "見つかりました"
この例では、CURRENT ディレクトリに正確に 10 個、10 個以上、10 個未満のファイル/ディレクトリが含まれているかどうかを確認できます。ディレクトリの束をチェックする必要がある場合は、ループを使用してください。