command-line – Ordenar archivos por tamaño de forma recursiva

Pregunta:

Necesito encontrar los archivos más grandes en una carpeta.
¿Cómo escaneo una carpeta de forma recursiva y clasifico el contenido por tamaño?

Intenté usar ls -R -S , pero esto también enumera los directorios.
También intenté usar find .

Respuesta:

También puede hacer esto con solo du . Solo para estar seguro, estoy usando esta versión de du :

$ du --version
du (GNU coreutils) 8.5

El enfoque:

$ du -ah ..DIR.. | grep -v "/$" | sort -rh

Desglose del enfoque

El comando du -ah DIR producirá una lista de todos los archivos y directorios en un directorio determinado DIR . La -h producirá tamaños legibles para humanos que prefiero. Si no los quiere, suelte ese interruptor. ¡Estoy usando el head -6 solo para limitar la cantidad de salida!

$ du -ah ~/Downloads/ | head -6
4.4M    /home/saml/Downloads/kodak_W820_wireless_frame/W820_W1020_WirelessFrames_exUG_GLB_en.pdf
624K    /home/saml/Downloads/kodak_W820_wireless_frame/easyshare_w820.pdf
4.9M    /home/saml/Downloads/kodak_W820_wireless_frame/W820_W1020WirelessFrameExUG_GLB_en.pdf
9.8M    /home/saml/Downloads/kodak_W820_wireless_frame
8.0K    /home/saml/Downloads/bugs.xls
604K    /home/saml/Downloads/netgear_gs724t/GS7xxT_HIG_5Jan10.pdf

Bastante fácil de clasificar de menor a mayor:

$ du -ah ~/Downloads/ | sort -h | head -6
0   /home/saml/Downloads/apps_archive/monitoring/nagios/nagios-check_sip-1.3/usr/lib64/nagios/plugins/check_ldaps
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/0/index/write.lock
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/0/translog/translog-1365292480753
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/1/index/write.lock
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/1/translog/translog-1365292480946
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/2/index/write.lock

Inviértalo, de mayor a menor:

$ du -ah ~/Downloads/ | sort -rh | head -6
10G /home/saml/Downloads/
3.8G    /home/saml/Downloads/audible/audio_books
3.8G    /home/saml/Downloads/audible
2.3G    /home/saml/Downloads/apps_archive
1.5G    /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
1.5G    /home/saml/Downloads/digital_blasphemy

No me muestres el directorio, solo los archivos:

$ du -ah ~/Downloads/ | grep -v "/$" | sort -rh | head -6 
3.8G    /home/saml/Downloads/audible/audio_books
3.8G    /home/saml/Downloads/audible
2.3G    /home/saml/Downloads/apps_archive
1.5G    /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
1.5G    /home/saml/Downloads/digital_blasphemy
835M    /home/saml/Downloads/apps_archive/cad_cam_cae/salome/Salome-V6_5_0-LGPL-x86_64.run

Si desea excluir todos los directorios de la salida, puede usar un truco con la presencia de un carácter de punto. Esto supone que los nombres de su directorio no contienen puntos y que los archivos que está buscando sí lo hacen. Luego puede filtrar los directorios con grep -v '\s/[^.]*$' :

$ du -ah ~/Downloads/ | grep -v '\s/[^.]*$' | sort -rh | head -2
1.5G    /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
835M    /home/saml/Downloads/apps_archive/cad_cam_cae/salome/Salome-V6_5_0-LGPL-x86_64.run

Si solo desea la lista del más pequeño al más grande, pero los 6 archivos principales infractores, puede invertir el interruptor de clasificación, soltar ( -r ) y usar tail -6 lugar de head -6 .

$ du -ah ~/Downloads/ | grep -v "/$" | sort -h | tail -6
835M    /home/saml/Downloads/apps_archive/cad_cam_cae/salome/Salome-V6_5_0-LGPL-x86_64.run
1.5G    /home/saml/Downloads/digital_blasphemy
1.5G    /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
2.3G    /home/saml/Downloads/apps_archive
3.8G    /home/saml/Downloads/audible
3.8G    /home/saml/Downloads/audible/audio_books

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım