Me gustaría que un comando BASH enumere solo el recuento de archivos en cada subdirectorio de un directorio.
Por ejemplo, en el directorio /tmp
hay dir1
, dir2
... me gustaría ver:
`dir1` : x files
`dir2` : x files ...
Suponiendo que desea un recuento recursivo de archivos solamente, no directorios y otros tipos, algo como esto debería funcionar:
find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
printf "%-25.25s : " "$dir"
find "$dir" -type f | wc -l
done
find
...-print0 | xargs -0
....bash
alias
!sort -rn -k 2,2 -t$':'
obtienes la lista DESCEsta tarea me fascinó tanto que quería encontrar una solución yo mismo. Ni siquiera toma un ciclo while y PUEDE ser más rápido en velocidad de ejecución. No hace falta decir que los esfuerzos de Thor me ayudaron mucho a entender las cosas en detalle.
Así que aquí está el mío:
Parece modesto por una razón, porque es mucho más poderoso de lo que parece. :-)
Sin embargo, si tiene la intención de incluir esto en su
.bash_aliases
archivo, debe verse así:Tenga en cuenta el manejo muy complicado de comillas simples anidadas . Y no, no es que no sea posible utilizar comillas dobles para el
sh -c
argumento.fuente
strace -fc script
. Su versión realiza aproximadamente un 70% más de llamadas al sistema. +1 para código más corto :-)find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "$(find "{}" -type f | wc -l)" {}' \; | sort -nr
Enumera carpetas y archivos en la carpeta actual con un recuento de archivos que se encuentran debajo. OMI rápido y útil. (los archivos se muestran con el recuento 1).
fuente
| sort -rn
para ordenar subdirecciones por número de archivos.Definitivamente, usar find es el camino a seguir si desea contar recursivamente, pero si solo desea contar los archivos directamente en un determinado directorio:
ls dir1 | wc -l
fuente
ls -d */ | xargs -n1 ls | wc -l
(Usar la respuesta que aceptar si ya funciona, aunque esto es sólo Y ahora usted sabe!.)find
es tan importante. (y mucho menos ,-print0
yxargs -0
ya lo señaló Scott en la otra respuesta)A menudo necesito contar la cantidad de archivos en mis subdirectorios y usar este comando. Prefiero que el recuento aparezca primero.
fuente
Lo que uso ... Esto hace una matriz de todos los subdirectorios en el que da como parámetro. Imprima el subdirectorio y el recuento de ese mismo subdirectorio hasta que se procesen todos los subdirectorios.
fuente
Podrías usar este código de Python. Inicie el intérprete ejecutando
python3
y pegue esto:O una versión recursiva para recuentos anidados:
Salida de ejemplo:
fuente