Cómo mostrar la cantidad de elementos en subdirectorios desde la línea de comando

Cómo mostrar la cantidad de elementos en subdirectorios desde la línea de comando

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í:

captura de pantalla de nautilo

¿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 ( \012hay 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:

  1. Puede ejecutarlo en varios directorios:

    lsc /path/to/dir /path/to/dir2 ... /path/to/dirN
    

    O en el actual:

    lsc
    
  2. Puede funcionar con nombres de archivos y directorios arbitrarios, incluso aquellos que contienen espacios o caracteres de nueva línea, como puede ver arriba.

información relacionada