Quiero saber el tamaño del archivo con extensión .o (archivo de objeto) en mi carpeta Inicio.
Puedo encontrar todos los archivos de objetos usando
find . -name '*.o'
¿Cómo puedo calcular ahora el tamaño total de esos archivos?
fuente
Quiero saber el tamaño del archivo con extensión .o (archivo de objeto) en mi carpeta Inicio.
Puedo encontrar todos los archivos de objetos usando
find . -name '*.o'
¿Cómo puedo calcular ahora el tamaño total de esos archivos?
Estás buscando pipas ( |
). Son una forma de conectar múltiples comandos y pasar la salida de un comando como entrada a otro. En este caso, desea pasar todos los nombres de archivo que encuentre como entrada du
(que calcula el tamaño). Sin embargo, dado du
que los nombres de archivo y los resultados find
son solo una lista de texto (sí, el texto consiste en nombres de archivo, pero du
no puede saberlo, todo lo que ve es texto), debe usar algo como xargs
lo que tomará cada línea de texto, trátelo como un nombre de archivo y páselo a du
. Al unir todo esto, obtenemos:
find . -name "*.o" | xargs du -sch
siempre debes citar los patrones que le das find
(como lo hice anteriormente "*.o"
). Si no lo hace, el shell expandirá *.o
los nombres de los archivos coincidentes en el directorio actual. Funcionó en este caso solo porque no tenía archivos coincidentes.
Las -sch
banderas para du
están documentadas en man du
:
-c, --total
produce a grand total
-h, --human-readable
print sizes in human readable format (e.g., 1K 234M 2G)
-s, --summarize
display only a total for each argument
Sin embargo, tenga en cuenta que esto fallará para los nombres de archivo que contienen espacios en blanco. Esto seguramente no será un problema para los archivos de objetos, pero en el futuro, si también necesita lidiar con espacios, use:
find . -name "*.o" -print0 | xargs -0 du -sch
Las -print0
marcas find
imprimen líneas separadas por NULL y las -0
marcas xargs
toman tales líneas como entrada.
Alternativamente, puede find
imprimir los tamaños en sí y luego sumarlos:
find . -name "*.o" -printf '%s\n' | awk '{c+=$1}END{print c}'
Esto también evitará el problema mencionado por @Serg en los comentarios donde hay demasiados argumentos y el comando se divide en comandos separados.
Si está usando bash
(probablemente lo esté), hay una manera más simple:
shopt globstar
du -sch **/*.o
El shopt globstar
comando hace **
coincidir todos los archivos y / o más subdirectorios. Después de habilitarlo, **/*.o
coincidirá con todos los archivos (y directorios) cuyo nombre termine .o
, para que podamos pasarlo directamente a du
.
Tenga en cuenta que, a diferencia del find
enfoque, esto no coincidirá con los archivos ocultos (aquellos cuyo nombre comienza con a .
). Para combinarlos también, haga:
shopt -s dotglob globstar
du -sch **/*.o
du
, y producirá múltiplestotal
líneas. Aquí hay un ejemplo: paste.ubuntu.com/23092752Usa la
-exec
bandera para correrdu
comando con;
(significado por cada archivo)Salida de muestra:
find
es recursivo, lo que significa que recorre todos los subdirectorios. Si solo desea obtener el total de todos los*.o
archivos en el directorio actual, simplemente hagafuente
con perl:
Tamaño de todos los archivos PDF no ocultos en el directorio actual.
fuente
.o
archivos y podrían estar en subdirectorios. También es posible que desee agregar un}{
antesprint $sum
para evitar imprimir la suma de cada iteración. Solo queremos el último.