GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo encuentro los archivos y totalizo sus tamaños?

Solución

Suministrando la opción -c (o --total ) a du(1) , puede indicarle que genere un total general. Si su implementación de du(1) admite cualquiera de estas opciones, puede lograr el efecto deseado usando el siguiente comando:

$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +

EDITAR: Tenga en cuenta que si la cantidad de archivos excede la cantidad máxima de parámetros permitidos por su sistema, find aún puede ejecutar command varias veces. Algunas implementaciones de du(1) también admite la lectura de los nombres de archivo de un archivo, que no sufre de la limitación mencionada:

$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames

Explicación

La diferencia entre la semántica de -exec command {} \; y -exec command {} + es el siguiente:

  • command {} \; ejecuta command una vez por cada resultado de find . Se pasa la ruta del resultado en lugar de {} .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} \;
    1
    2
    3
    
  • command {} + ejecuta command , cuando se hayan recuperado todos los resultados. Los nombres de ruta de los resultados se pasan en lugar de {} .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} +
    1 2 3
    

El -print0 opción provoca find(1) para imprimir los nombres de archivo encontrados en la salida estándar separados por el carácter nulo y el --files0-from opción causó du(1) para leer los nombres de archivo separados por valores nulos. A diferencia del carácter de nueva línea, es posible que el carácter nulo no aparezca en un nombre de archivo, por lo que el resultado no es ambiguo.

Para obtener más información sobre las opciones de du(1) y find(1) , debe consultar las respectivas páginas de manual:

$ man du
$ man find

Prueba esto:

du -c `find . -name 'flibble*' -ctime +90` | tail -1

El comando original es dar du un argumento, luego ejecutarlo, hasta que pasa por todos los argumentos. De esta manera, simplemente le está dando todos los argumentos a la vez, luego corta los tamaños separados y deja solo el total. Si lo desea, puede quitar la tubería y la cola para mostrar el tamaño de cada archivo.


Puedes probar esto:

find . -name 'flibble*' -ctime +90 -exec du -ch {} + | grep total

Linux
  1. Cómo encontrar archivos de configuración de MySQL, PHP y Apache

  2. Cómo encontrar el número de archivos en un directorio y subdirectorios

  3. Cómo encontrar y eliminar directorios y archivos vacíos en Linux

  4. ¿Cómo contar el número total de líneas de archivos encontrados?

  5. ¿Cómo chmod y chown archivos ocultos en Linux?

Cómo encontrar recursivamente y enumerar los archivos por fecha en Linux

Cómo encontrar y eliminar archivos duplicados en Linux

Cómo encontrar y eliminar archivos que contienen un texto específico en sus nombres en Linux

Cómo encontrar archivos según sus permisos en Linux

Cómo encontrar archivos duplicados en Linux y eliminarlos

Cómo encontrar archivos en Debian