Pregunta

Por ejemplo, tengo un gran sistema de archivos que se está llenando más rápido de lo que esperaba. Así que busco lo que está siendo añadido:

find /rapidly_shrinking_drive/ -type f -mtime -1 -ls | less

Y me parece, así, un montón de cosas. Miles de archivos de seis y siete tipos. Puedo señalar a un tipo y contarlos:

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 -ls | wc -l

pero lo que realmente me gustaría es ser capaz de obtener el tamaño total del disco de estos archivos:

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 | howmuchspace

Estoy abierto a una sola línea de Perl para esto, si alguien tiene uno, pero yo no voy a utilizar cualquier solución que implique una secuencia de comandos de varias líneas, o File :: Find.

¿Fue útil?

Solución

El comando du le informa sobre el uso del disco. Ejemplo de uso para su caso específico:

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 -print0 | du --files0-from=- -hc | tail -n1

(Anteriormente escribí du -hs, pero en mi máquina que parece no tener en cuenta la entrada de find y en su lugar se resume el tamaño de la caquexia crónica.)

Otros consejos

Darn, Stephan202 es correcto. Yo no pienso du -s (resumen), así que en vez utilicé awk:

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 | du | awk '{total+=$1} END{print total}'

Me gusta la otra respuesta mejor, aunque, y es casi seguro que sea más eficiente.

con GNU encontrar,

 find /path -name "offender" -printf "%s\n" | awk '{t+=$1}END{print t}'

Me gustaría promover el comentario de Jason arriba para el estado de respuesta, porque creo que es la más mnemotécnico (aunque no el más genérico, si realmente tienes que tener la lista de archivos especificado por find):

$ du -hs *.nc
6.1M  foo.nc
280K  foo_region_N2O.nc
8.0K  foo_region_PS.nc
844K  foo_region_xyz.nc
844K  foo_region_z.nc
37M   ETOPO1_Ice_g_gmt4.grd_region_zS.nc
$ du -ch *.nc | tail -n 1
45M total
$ du -cb *.nc | tail -n 1
47033368  total

He intentado todos estos comandos, pero sin suerte. Así que he encontrado éste que me da una respuesta:

find . -type f -mtime -30 -exec ls -l {} \; | awk '{ s+=$5 } END { print s }'

También es posible usar ls -l para encontrar su tamaño, entonces awk para extraer el tamaño:

find /rapidly_shrinking_drive/ -name "offender1" -mtime -1 | ls -l | awk '{print $5}' | sum
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top