Můžete zkusit toto, abyste získali názvy podadresářů a počet souborů/adresářů, které obsahují:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;
Pokud chcete udělat totéž pro všechny podadresáře (rekurzivní hledání), použijte místo toho toto:
find . -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;
Chcete-li vybrat ty adresáře, které mají přesně 10 souborů:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
awk '$NF==10'
10 nebo více:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
awk '$NF>=10'
10 nebo méně:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
awk '$NF<=10'
Pokud si chcete ponechat pouze název adresáře (např. chcete-li jej přesměrovat do jiného procesu po proudu, jak navrhuje @evilsoup), můžete použít toto:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{}\t'; ls '{}' | wc -l" \; |
awk -F"\t" '$NF<=10{print $1}'
Chcete-li zobrazit okamžité podadresáře obsahující přesně $NUM
soubory.
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}'
Chcete-li zobrazit okamžité podadresáře obsahující větší než $NUM
soubory.
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}'
Chcete-li zobrazit okamžité podadresáře obsahující méně než $NUM
soubory.
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}'
Položky jsou ukončeny prázdným znakem \0
, takže názvy souborů, které obsahují nové řádky nebo jiné typy mezer, budou správně interpretovány. %h
vytiskne dirname
každého souboru . awk
pak pomocí pole spočítá, kolikrát narazí na každý adresář, a vytiskne jej, pokud jsou splněny podmínky.
Vezměte prosím na vědomí, že žádný z výše uvedených příkazů nezobrazí adresáře obsahující nula souborů. Všimněte si také, že souborem mám na mysli běžné soubory, ne odkazy, adresáře, zásuvky, bloky, pojmenované kanály atd.
Snažil jsem se to udělat co nejjednodušeji. Pokud chcete najít rekurzivní podadresáře nebo soubory v nich, je vyžadován upravený příkaz. Existuje příliš mnoho možností, než je všechny vyjmenovat.
Zkuste toto:
['najít. | wc -l` -eq 10 ] &&echo "Nalezeno"
['najít. | wc -l` -gt 10 ] &&echo "Nalezeno"
['najít. | wc -l` -lt 10 ] &&echo "Nalezeno"
V těchto příkladech můžete zkontrolovat, zda AKTUÁLNÍ adresář obsahuje přesně 10, více než 10 a méně než 10 souborů/adresářů. Pokud potřebujete zkontrolovat spoustu adresářů, použijte smyčku.