Estoy tratando de encontrar todos los archivos grandes en mi servidor Centos. Para hacer eso estoy usando:
find / -maxdepth 10 -size +100000 -ls
Intenté cambiar -ls
a -lsh
pero no está permitido.
¿Cómo puedo mostrar estos resultados con tamaños legibles por humanos (usando los sufijos k, M, ...)?
file
utilidad confind
.Respuestas:
find
no tiene opciones sofisticadas comols
. Si quieresls -h
, necesitas llamarls
.Recomiendo la
-xdev
opción de evitar recurrir a otros sistemas de archivos, lo que sería inútil si le preocupa el espacio en disco.Si usa zsh como su shell, en lugar de usar
find
, puede usar calificadores glob. Limitar el tamaño del archivo es simple:L
seguido de un tamaño; El tamaño puede tener una unidad opcional antes del número. Si no le importa la profundidad máxima, puede usar**/
para recurrir a subdirectorios. Si le importa la profundidad máxima, es más engorroso ya que los patrones de globo zsh carecen de una forma de expresar "a lo sumo n ocurrencias". Para evitar la recurrencia entre dispositivos, use eld
calificador global; necesita encontrar el número de dispositivo, que puede mostrar con elstat
comando en Linux (stat -c %d /
para mostrar solo el número) o con el propiostat
incorporado de zsh (ejecutarzmodload zsh/stat
para cargarlo).fuente
El comando que está intentando es legible para mí. Sin embargo, puede hacer uso de la utilidad de archivo con la búsqueda de la siguiente manera.
Otra forma de hacerlo es usando el siguiente comando.
El comando anterior le dará los archivos en el tamaño de archivo ordenado.
Si está utilizando coreutils> 7.5 , puede ejecutar el siguiente comando para enumerar los archivos por tamaños.
En mi máquina, no tenía la
sort -h
opción disponible.Como mencionó en el comentario, su formato legible para humanos es que el archivo debe tener el tamaño en kb , mb o gb . Iría con el segundo comando que había publicado como respuesta. El resultado que obtuve cuando lo usé en mi sistema es,
fuente
> output
al comando. Luego, puede abrir el archivo y ver el resultado que desee :)du -a --max-depth=10 / | sort -rn
es el cierre que se me ocurrió. Sin embargo, en este caso, no mostrará el tamaño en KB, MB o GB.Creo que lo que buscas es más como lo siguiente.
El le
-exec
permite ejecutar un comando y el{}
se sustituye con el resultado del hallazgo. Por último,+
es decir que encontrar es el final del comando y es obligatorio.fuente
{}
aquí. Las comillas simples en el comando son para el shell, pero el shell nunca va a ver ells -lah <args...>
comando en absoluto, ve{}
, lo que no necesita ser citado. Es lofind
que vels -lah {}
y es lofind
que expande el{}
, y como lo implica el nombre de la-exec
opción,find
usa unaexec*
llamada al sistema en los argumentos directamente, por lo que no habrá problemas con los espacios porquefind
no va a dividir las palabras en sus nombres de archivo.-a
opciónls
es innecesaria ya que se espera que los argumentos sean archivos y no directorios. GNU encuentra usosls -dils
para la-ls
opción, por lo que replicarlo más de cerca seríals -dilsh
.find . -type f -exec file '{}' \;
ejecuta archivos en cada archivo dentro o debajo del directorio actual. Tenga en cuenta que los corchetes están encerrados entre comillas simples para protegerlos de la interpretación como puntuación de script de shell. El punto y coma está protegido de manera similar mediante el uso de una barra diagonal inversa, aunque las comillas simples también podrían haberse utilizado en ese caso.{}
ser citado.