En la interfaz gráfica de usuario de Ubuntu, puedo enumerar los subdirectorios en un directorio donde una columna representa la cantidad de elementos en estos subdirectorios. Como se muestra aquí:
¿Hay alguna manera de obtener el mismo resultado (número de elementos en la columna de tamaño) usando la línea de comando?
Respuesta1
Aquí hay una pequeña función de shell que puedes usar. Simplemente agregue estas líneas a su ~/.bashrc
:
lsc(){
## globs that don't match should expand to a null string
shopt -s nullglob
## If no arguments were given use the current dir
if [[ $# -eq 0 ]]; then
targets="."
## Otherwise, use whatever was given
else
targets=($@)
fi
## iterate over the arguments given
for target in "${targets[@]}"; do
## get the contents of the target
contents=("$target"/*)
## iterate over the contents
for thing in "${contents[@]}"; do
## If this one is a directory
if [[ -d "$thing" ]]; then
## collect the directory's contents
count=("$thing"/*)
## Print the dir's name (with a '/' at the end)
## and the number of items found in it
printf "%s/ (%s)\n" "$thing" "${#count[@]}"
else
## If this isn't a dir, just print the name
printf "%s\n" "$thing"
fi
done
done
}
luego abre una nueva terminal y ejecuta:
lsc /path/to/dir
Por ejemplo, dado el siguiente directorio ( \012
hay nuevas líneas en los nombres):
$ tree
.
├── a bad one
│ └── file 1
├── a bad worse\012one
│ └── file 1 \012two
├── dir1
│ └── file
├── dir2
│ ├── file1
│ └── file2
├── dir3
│ ├── file1
│ ├── file2
│ └── file3
├── dir4
│ └── dir
├── empty_dir
8 directories, 7 files
Obtendrías:
$ lsc
./a bad one/ (1)
./a bad worse
one/ (1)
./dir1/ (1)
./dir2/ (2)
./dir3/ (3)
./dir4/ (1)
./empty_dir/ (0)
./mp3/ (1)
Las principales ventajas de este enfoque son:
Puede ejecutarlo en varios directorios:
lsc /path/to/dir /path/to/dir2 ... /path/to/dirN
O en el actual:
lsc
Puede funcionar con nombres de archivos y directorios arbitrarios, incluso aquellos que contienen espacios o caracteres de nueva línea, como puede ver arriba.