texto tamaño subdirectorios recursivo por listar fecha extension directorios comando buscar archivos archivo file bash directory find large-files

file - tamaño - Bash-¿Cómo encontrar el archivo más grande en un directorio y sus subdirectorios?



listar archivos por tamaño linux (14)

Cita de this enlace-

Si desea buscar e imprimir los 10 nombres de archivos más grandes (no directorios) en un directorio particular y sus subdirectorios

$ find . -printf ''%s %p/n''|sort -nr|head

Para restringir la búsqueda al directorio actual use "-maxdepth 1" con find.

$ find . -maxdepth 1 -printf ''%s %p/n''|sort -nr|head

Y para imprimir los 10 principales "archivos y directorios" más grandes:

$ du -a . | sort -nr | head

** Use "head -n X" en lugar del único "encabezado" anterior para imprimir los archivos X más grandes (en todos los ejemplos anteriores)

Estamos comenzando una clase UNIX y estamos aprendiendo una variedad de comandos Bash. Nuestra tarea implica ejecutar varios comandos en un directorio que también tiene varias carpetas debajo.

Sé cómo enumerar y contar todos los archivos normales de la carpeta raíz usando:

find . -type l | wc -l

Pero me gustaría saber a dónde ir desde allí para encontrar el archivo más grande en todo el directorio. He visto algunas cosas relacionadas con un comando du , pero no hemos aprendido eso, así que en el repertorio de cosas que hemos aprendido supongo que tenemos que conectarlo de algún modo con el ls -t .

Y perdónenme si mi ''jerga'' no es correcta, ¡todavía me estoy acostumbrando!


En Solaris utilizo:

find . -type f -ls|sort -nr -k7|awk ''NR==1{print $7,$11}'' #formatted

o

find . -type f -ls | sort -nrk7 | head -1 #unformatted

porque cualquier cosa publicada aquí no funcionó. Esto encontrará el archivo más grande en $PWD y subdirectorios.


Esa es una forma bastante simple de hacerlo:

ls -l | tr -s " " " " | cut -d " " -f 5,9 | sort -n -r | head -n 1***

Y obtendrás esto: 8445 examples.desktop


Este script simplifica la búsqueda de archivos más grandes para futuras acciones. Lo guardo en mi directorio ~ / bin, y puse ~ / bin en mi $ PATH.

#!/usr/bin/env bash # scriptname: above # author: Jonathan D. Lettvin, 201401220235 # This finds files of size >= $1 (format ${count}[K|M|G|T], default 10G) # using a reliable version-independent bash hash to relax find''s -size syntax. # Specifying size using ''T'' for Terabytes is supported. # Output size has units (K|M|G|T) in the left hand output column. # Example: # ubuntu12.04$ above 1T # 128T /proc/core # http://.com/questions/1494178/how-to-define-hash-tables-in-bash # Inspiration for hasch: thanks Adam Katz, Oct 18 2012 00:39 function hasch() { local hasch=`echo "$1" | cksum`; echo "${hasch//[!0-9]}"; } function usage() { echo "Usage: $0 [{count}{k|K|m|M|g|G|t|T}"; exit 1; } function arg1() { # Translate single arg (if present) into format usable by find. count=10; units=G; # Default find -size argument to 10G. size=${count}${units} if [ -n "$1" ]; then for P in TT tT GG gG MM mM Kk kk; do xlat[`hasch ${P:0:1}`]="${P:1:1}"; done units=${xlat[`hasch ${1:(-1)}`]}; count=${1:0:(-1)} test -n "$units" || usage test -x $(echo "$count" | sed s/[0-9]//g) || usage if [ "$units" == "T" ]; then units="G"; let count=$count*1024; fi size=${count}${units} fi } function main() { sudo / find / -type f -size +$size -exec ls -lh {} /; 2>/dev/null | / awk ''{ N=$5; fn=$9; for(i=10;i<=NF;i++){fn=fn" "$i};print N " " fn }'' } arg1 $1 main $size


Esto encontrará el archivo o la carpeta más grande en su directorio de trabajo actual:

ls -S /path/to/folder | head -1

Para encontrar el archivo más grande en todos los subdirectorios:

find /path/to/folder -type f -exec ls -s {} /; | sort -nr | awk ''NR==1 { $1=""; sub(/^ /, ""); print }''


Esto enumera los archivos recursivamente si son archivos normales, ordena en el 7mo campo (que es el tamaño en mi salida de find , verifica el tuyo) y muestra solo el primer archivo.

find . -type f -ls | sort +7 | head -1

La primera opción para find es la ruta de inicio para la búsqueda recursiva. Un tipo de f busca archivos normales. Tenga en cuenta que si intenta analizar esto como un nombre de archivo, puede fallar si el nombre de archivo contiene espacios, líneas nuevas u otros caracteres especiales. Las opciones para sort también varían según el sistema operativo. Estoy usando FreeBSD.

Una solución "mejor" pero más compleja y más pesada sería find recorrido de los directorios, pero tal vez usar stat para obtener los detalles sobre el archivo, y luego quizás usar awk para encontrar el tamaño más grande. Tenga en cuenta que la salida de stat también depende de su sistema operativo.


Intenta seguir el comando:

find /your/path -printf "%k %p/n" | sort -g -k 1,1 | awk ''{if($1 > 500000) print $1/1024 "MB" " " $2 }'' |tail -n 1

Esto imprimirá el nombre y tamaño de archivo más grande y más de 500M. Puede mover el if($1 > 500000) e imprimirá el archivo más grande en el directorio.


No hay un comando simple disponible para encontrar los archivos / directorios más grandes en un sistema de archivos Linux / UNIX / BSD. Sin embargo, la combinación de los siguientes tres comandos (usando pipes) puede encontrar fácilmente una lista de los archivos más grandes:

# du -a /var | sort -n -r | head -n 10

Si quieres una salida legible más humana, prueba:

$ cd /path/to/some/var $ du -hsx * | sort -rh | head -10

Dónde,

  • Var es el directorio en el que desea buscar
  • Opción du command -h: muestra los tamaños en formato legible para humanos (p. ej., 1K, 234M, 2G).
  • Opción du command -s: muestra solo un total para cada argumento (resumen).
  • du command -x opción: omitir directorios en diferentes sistemas de archivos.
  • ordenar comando -r opción: revertir el resultado de las comparaciones.
  • ordene la opción -h del comando: compare los números legibles humanos. Esta es una opción específica de género GNU solamente.
  • comando head -10 OR -n opción 10: muestra las primeras 10 líneas.

Para buscar los 25 archivos principales en el directorio actual y sus subdirectorios:

find . -type f -exec ls -al {} /; | sort -nr -k5 | head -n 25

Esto generará los 25 archivos principales ordenando según el tamaño de los archivos mediante el comando "sort -nr -k5".


Para mostrar el archivo más grande en una carpeta

ls -sh /pathFolder | sort -rh | head -n 1

La salida de ls -sh es una vista comprensible del número de tamaño de archivo.

Puede usar ls -shS /pathFolder | head -n 1 ls -shS /pathFolder | head -n 1 . Los S más grandes de ls ya ordenan la lista de los archivos más grandes a los más pequeños, pero el primer resultado es la suma de todos los archivos en esa carpeta. Entonces, si solo desea listar el archivo más grande, un archivo, debe head -n 2 y verificar el "resultado de la segunda línea" o usar el primer ejemplo con ls sort head .


Prueba el siguiente one-liner (muestra los 20 archivos más grandes):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

o (tamaños legibles por humanos):

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

Funciona bien en Linux / BSD / OSX en comparación con otras respuestas, ya que la opción '' -printf '' de -printf no existe en OSX / BSD y stat tiene diferentes parámetros según el sistema operativo. Sin embargo, el segundo comando para trabajar en OSX / BSD correctamente (como sort no tiene -h ), instala sort de coreutils o elimina -h de ls y utiliza sort -nr en sort -nr lugar.

Por lo tanto, estos alias son útiles para tener en sus archivos rc :

alias big=''du -ah . | sort -rh | head -20'' alias big-files=''ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20''


du -aS /PATH/TO/folder | sort -rn | head -2 | tail -1

o

du -aS /PATH/TO/folder | sort -rn | awk ''NR==2''


Solución Linux: por ejemplo, desea ver todos los archivos / la lista de carpetas de su directorio principal (/) según el tamaño del archivo / carpeta ( orden descendente ).

sudo du -xm / | ordenar -rn | Más


find . -type f | xargs ls -lS | head -n 1

salidas

-rw-r--r-- 1 nneonneo staff 9274991 Apr 11 02:29 ./devel/misc/test.out

Si solo quieres el nombre del archivo:

find . -type f | xargs ls -1S | head -n 1

Esto evita utilizar awk y le permite usar las banderas que desee en ls .

Advertencia . Debido a que xargs intenta evitar la construcción de líneas de comando demasiado largas, esto podría fallar si lo ejecuta en un directorio con muchos archivos porque termina ejecutándose más de una vez. No es un problema insuperable (puede recopilar la salida head -n 1 de cada invocación de ls , y ejecutar ls -S nuevo, en bucle hasta que tenga un solo archivo), pero de alguna manera altera este enfoque.