GNU/Linux >> Tutoriales Linux >  >> Linux

Listado de directorios según el tamaño de mayor a menor en una sola línea

Si está seguro de que los nombres de los directorios no contienen espacios en blanco, es sencillo obtener todos los nombres de los directorios en una línea:

du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

Obtener la información en python

Si desea capturar esa salida en un programa de python y convertirla en una lista. Usando python2.7 o mejor:

import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()

En python2.6:

import subprocess
subprocess.Popen("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True, stdout=subprocess.PIPE).communicate()[0].split()

También podemos aprovechar las funciones de python para reducir la cantidad de trabajo realizado por el shell y, en particular, para eliminar la necesidad de awk :

subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]

Se podría ir más allá y leer el du salida directamente en python, convertir los tamaños a enteros y ordenar por tamaño. Sin embargo, es más simple hacer esto con sort -nr en la concha.

Especificar un directorio

Si los directorios cuyo tamaño desea no están en el directorio actual, existen dos posibilidades:

du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

y también:

cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

La diferencia entre estos dos es si /some/path está incluido en la salida o no.


Usando paste

du -sk [a-z]* 2>/dev/null | sort -nr| cut -f2- | paste -s -

zsh tiene la capacidad de ordenar sus globs usando calificadores globbing. También puede definir sus propios calificadores globales con funciones. Por ejemplo:

zdu() REPLY=$(du -s -- "$REPLY")

print -r -- [[:alpha:]]*(/nO+zdu)

imprimiría los directorios (/ ) cuyo nombre comienza con una letra (por cierto, [a-z] solo tiene sentido en la configuración regional C) numéricamente (n) ordenados inversamente (O) usando el zdu función.

Tenga en cuenta que cuando lo haga:

du -s a b

Si a y b contienen enlaces duros a los mismos archivos, su uso de disco se contará como a pero no para b . El zsh enfoque aquí evita eso.

Si vas a usar python, yo haría lo mismo desde allí:llama a du -s para cada uno de los archivos y ordenar esa lista allí. Recuerde que los nombres de los archivos pueden contener cualquier carácter, incluidos espacios, tabuladores y saltos de línea.


Linux
  1. Cómo eliminar archivos y directorios en Linux desde la línea de comandos

  2. Buscar torrents desde la línea de comandos en Linux

  3. La salida de Ls tiene saltos de línea pero se muestra en una sola línea. ¿Por qué?

  4. ¿Cómo puedo crear un archivo con un tamaño específico desde una línea de comando?

  5. Bash si está en una sola línea

Programe hardware desde la línea de comandos de Linux

Buscar productos de Amazon desde la línea de comandos

Cómo crear directorios desde un archivo de texto en Linux

Copie un archivo a varios directorios desde la línea de comandos en Linux

Cómo hacer una copia de seguridad de una sola base de datos MySQL desde la línea de comandos

Enviar correo electrónico en Linux desde la línea de comandos