Jump to content

¿Comando para contar tamaño de archivos recursivamente?


Ronon
 Compartir

Publicaciones recomendadas

Buenas, para una instalación de Prestashop, donde los directorios de imágenes son en 9 niveles y hay miles de imágenes... necesito un comando para contar los archios JPG y WEBP que existen, y ver el tamaño total de cada grupo (por tipo de extensión, por ejemplo: "tienes 9 mil archivos jpg y ocupan 10 gigas; tienes 9 mil archivos webp y ocupan 5 gigas").

 

Con find los lista, pero no me dice el tamaño ni el número de archivos que hay:

 

find . -name "*.jpg" -type f

 

Posteriromente me interesará borrarlos, lo cual lo hago con la opción -delete de find, pero no encuentro en el manual de find ninguna opción para contar los archivos, el total, pasando por todos los subdirectorios recursivamente... Con esto los borraría por extensión pero necesitaría saber primero el tamaño total:

 

find . -name "*.jpg" -type f -delete

 

¿Hay forma de hacerlo? Supongo que con tuberías (pipe) pero por más que busco en la web no encuentro el comando exacto... o a lo mejor no es con find, sino con ls...

 

Gracias.

 

PD: Por si sirve, uso Ubuntu Server 20.04, que no sé si habrá algún programa específico para instalar y hacer esto.

Enlace al comentario
Compartir en otros sitios web

Investiga el comando siguiente (te dejo la opción que saca todos los tamaños de ficheros y directorios / subdirectorios, normalmente demasiado detallada):

 

du -h *

 

Puedes ponerle límite de niveles también (lo tengo definido como alias):

 

alias dudu='du -d1 -ha'

 

Por supuesto tienes mil opciones en el manual.

 

 

Para contar ficheros, puedes combinar el find con wc (con -l para contar líneas):

 

find . -name "*.jpg" -type f | wc -l

 

A veces sale mal la cuenta por uno, si hay una cabecera.

Editado por alfonsodelavega
Enlace al comentario
Compartir en otros sitios web

Publicado (editado)
hace 1 hora, shiva2004 dijo:

En el directorio raiz de las imágenes prueba con "ls -R *.jpg", no tengo ninguna máquina con ubuntu o similar para probar pero debería ser algo así.

 

Buenas, me saca los archivos jpg del directorio raíz donde me pongo, no se mete a sacarlo recursivamente... De todas formas, únicamente me saca el listado, no especifica el tamaño total, que es lo que necesito (cantidad de archivos y gigas totales). Muestra algo así:

 

httpdocs/img/p# ls -R *.jpg
ar-default-cart_default.jpg    fa-default-cart_default.jpg    ko-default-home_default.jpg    ru-default-large_default.jpg
ar-default-home_default.jpg    fa-default-home_default.jpg    ko-default-large_default.jpg   ru-default-medium_default.jpg
ar-default-large_default.jpg   fa-default-large_default.jpg   ko-default-medium_default.jpg  ru-default-small_default.jpg
ar-default-medium_default.jpg  fa-default-medium_default.jpg  ko-default-small_default.jpg   ru.jpg
ar-default-small_default.jpg   fa-default-small_default.jpg   ko.jpg                         si-default-cart_default.jpg
ar.jpg                         fa.jpg                         lt-default-cart_default.jpg    si-default-home_default.jpg
bg-default-cart_default.jpg    fi-default-cart_default.jpg    lt-default-home_default.jpg    si-default-large_default.jpg
bg-default-home_default.jpg    fi-default-home_default.jpg    lt-default-large_default.jpg   si-default-medium_default.jpg
bg-default-large_default.jpg   fi-default-large_default.jpg   lt-default-medium_default.jpg  si-default-small_default.jpg
bg-default-medium_default.jpg  fi-default-medium_default.jpg  lt-default-small_default.jpg   si.jpg

 

hace 1 hora, alfonsodelavega dijo:

Investiga el comando siguiente (te dejo la opción que saca todos los tamaños de ficheros y directorios / subdirectorios, normalmente demasiado detallada):

 

du -h *

 

Hola, me saca un listado de todos los archivos, indicando en cada uno a la izquierda, lo que ocupa individualmente, no me sirve porque necesito el total.... Sale algo así:

 

8.0K    uk.jpg
4.0K    vn-default-cart_default.jpg
8.0K    vn-default-home_default.jpg
12K     vn-default-large_default.jpg
8.0K    vn-default-medium_default.jpg
4.0K    vn-default-small_default.jpg
8.0K    vn.jpg
4.0K    zh-default-cart_default.jpg
8.0K    zh-default-home_default.jpg
12K     zh-default-large_default.jpg
8.0K    zh-default-medium_default.jpg
4.0K    zh-default-small_default.jpg
8.0K    zh.jpg

 

 

hace 1 hora, alfonsodelavega dijo:

Puedes ponerle límite de niveles también (lo tengo definido como alias):

 

alias dudu='du -d1 -ha'

 

Por supuesto tienes mil opciones en el manual.

 

Si hago algo así como du -ha *.jpg me sale el mismo tipo de resultado que antes... Me miraré el manual bien a fondo a ver...

 

 

hace 1 hora, alfonsodelavega dijo:

 

Para contar ficheros, puedes combinar el find con wc (con -l para contar líneas):

 

find . -name "*.jpg" -type f | wc -l

 

A veces sale mal la cuenta por uno, si hay una cabecera.

 

Obtengo el número de archivos total, pero no el tamaño que ocupan...

 

find . -name "*.jpg" -type f | wc -l
830461

 

find . -name "*.webp" -type f | wc -l
673160

 

Bueno, me da una idea, porque debería salir lo mismo, y no, así que tengo muchas imágenes que todavía no se han pasado a webp.

 

Aún así necesito la estimación o el cálculo del tamaño de cada grupo de imágenes.

 

Buf, sigo buscando, gracias  los dos por la ayuda!!

Editado por Ronon
Enlace al comentario
Compartir en otros sitios web

hace 29 minutos, Ronon dijo:

Hola, me saca un listado de todos los archivos, indicando en cada uno a la izquierda, lo que ocupa individualmente, no me sirve porque necesito el total.... Sale algo así:

Borra  la opción - h para que no calcule megas o kilobytes , vuelva el listado de tamaño y ficheros a un archivo de texto y lo abres con un programa de hoja de cálculo para calcular el total.

Añado: “du” puede calcular el total :

 

https://unix.stackexchange.com/questions/167084/how-to-show-only-total-file-size-of-particular-extension-by-du-command

Enlace al comentario
Compartir en otros sitios web

Hummm, nada, du parece no contar recursivamente, sólo me muestra 2 MB y el listado de archivos jpg del raíz de esa carpeta:

 

/httpdocs/img/p

 

Pero dentro de esa, hay 9 directorios y cada uno de ellos contiene otros 9, y cada uno otros 9, y así en varios niveles...

 

Al final lo que hice fue comprimir la carpeta en un tar, descomprimirla en Windows, y luego simplemente:

 

dir /s *.jpg

Cita

     Total de archivos en la lista:
           829153 archivos 23.999.149.128 bytes
               0 dirs  184.512.049.152 bytes libres

 

dir /s *.webp

Cita

     Total de archivos en la lista:
           673160 archivos  5.728.978.418 bytes
               0 dirs  184.511.959.040 bytes libres

 

Y los resultados te saca el conteo de archivos y lo que ocupa el total, sin hacer nada más.

 

Yo pensaba que había algo similar en Linux, sencillo como esto de Windows, pero ya veo que no. Al final mil comandos y opciones y tuberías y ostias, y acabo antes haciéndolo en Windows a lo cutre...

 

Gracias a todos por el interés, un saludo.

Enlace al comentario
Compartir en otros sitios web

hace 45 minutos, Ronon dijo:

Yo pensaba que había algo similar en Linux, sencillo como esto de Windows, pero ya veo que no. Al final mil comandos y opciones y tuberías y ostias, y acabo antes haciéndolo en Windows a lo cutre...

 

No sé si es un lamento, una crítica o ambas cosas. Los "mil comandos y opciones y tuberías y hostias" dan mucho juego, siento que no te hayan solucionado esta vez la papeleta. ¿Son difíciles? Un poco, pero el paradigma Unix y sus herramientas de espacio de usuario son muy potentes y flexibles cuando se les coge el punto. ¿Son perfectas? No, pero es ingeniería que está aguantando el tipo > 40 años (y que tenemos gratis por la gente que ha tenido la deferencia de programarlas con licencias libres). Respect.

 

Sobre el problema a solucionar:

 

La solución con "du" tiene el problema (que se explicaba en el enlace de StackOverflow) de usar el operador **/, que no está soportado por defecto en Bash. Me he dado cuenta al probarla.

 

No soy un gran fan de awk (he googleado literalmente "bash sum column"), pero para sumar la primera columna del listado de tamaños de archivo da el apaño (el resultado es en bytes):

find <ruta_a_archivos_jpg> -name "*.jpg" -type f -exec ls -s {} \; | awk '{s+=$1}END{print s}'

Sin usar awk, el comando "find" anterior te da un listado de "<tamaño> <nombre archivo>", más fácil de mover y procesar usando algo como Excel, por ejemplo.

  • Love 2
  • De acuerdo 1
Enlace al comentario
Compartir en otros sitios web

hace 13 horas, Maxmalkav dijo:

 

No sé si es un lamento, una crítica o ambas cosas. Los "mil comandos y opciones y tuberías y hostias" dan mucho juego, siento que no te hayan solucionado esta vez la papeleta. ¿Son difíciles? Un poco, pero el paradigma Unix y sus herramientas de espacio de usuario son muy potentes y flexibles cuando se les coge el punto. ¿Son perfectas? No, pero es ingeniería que está aguantando el tipo > 40 años (y que tenemos gratis por la gente que ha tenido la deferencia de programarlas con licencias libres). Respect.

 

Sobre el problema a solucionar:

 

La solución con "du" tiene el problema (que se explicaba en el enlace de StackOverflow) de usar el operador **/, que no está soportado por defecto en Bash. Me he dado cuenta al probarla.

 

No soy un gran fan de awk (he googleado literalmente "bash sum column"), pero para sumar la primera columna del listado de tamaños de archivo da el apaño (el resultado es en bytes):

find <ruta_a_archivos_jpg> -name "*.jpg" -type f -exec ls -s {} \; | awk '{s+=$1}END{print s}'

Sin usar awk, el comando "find" anterior te da un listado de "<tamaño> <nombre archivo>", más fácil de mover y procesar usando algo como Excel, por ejemplo.

 

No no, si no me quejo... en mi trabajo estoy con Red Hat Enterprise y Solaris en consola todo el santo día, pero son cosas que me sorprenden, simplemente...

 

Muchas gracias, probaré eso a ver.

Enlace al comentario
Compartir en otros sitios web

La que uso yo para ver por que me peta de vez en cuando la MV por espacio 

df -h

para ver que ruta está al 100%

 

En el caso de /tmp :

sudo du --max-depth=1 --human-readable /tmp | sort  --human-numeric-sort

 

Enlace al comentario
Compartir en otros sitios web

Por favor conéctate para comentar

Podrás dejar un comentario después de iniciar sesión



Conectar ahora
 Compartir

×
×
  • Crear nuevo...