Aby wyświetlić listę bezpośrednich podkatalogów zawierających dokładnie $NUM
pliki.
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}'
Aby wyświetlić listę bezpośrednich podkatalogów zawierających więcej niż $NUM
pliki.
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}'
Aby wyświetlić listę bezpośrednich podkatalogów zawierających mniej niż $NUM
pliki.
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}'
Elementy są zakończone znakiem zerowym \0
, więc nazwy plików zawierające znaki nowej linii lub inne białe znaki będą interpretowane poprawnie. %h
Drukuje każdego pliku dirname
. awk
następnie używa tablicy, aby policzyć, ile razy napotyka każdy katalog, drukując go, jeśli warunki są spełnione.
Należy pamiętać, że żadne z wyżej wymienionych poleceń nie wyświetla katalogów zawierających pliki zerowe. Zauważ też, że przez plik mam na myśli zwykłe pliki, a nie łącza, katalogi, gniazda, bloki, nazwane potoki itp.
Próbowałem to zrobić tak prosto, jak to możliwe. Jeśli chcesz znaleźć rekurencyjne podkatalogi lub znajdujące się w nich pliki, wymagane jest zmodyfikowane polecenie. Istnieje zbyt wiele możliwości, aby wymienić je wszystkie.