listar archivos multimedia

Imagen de Egoitz808
0 puntos

Hola:
Estoy pretendiendo, mediante linea de comandos, mostrar los archivos multimedia y su tamaño. Intento listar de dos formas pero no lo consigo. ¿alguien me podría echar una mano?
ls -S *.{avi,mp4}
find . -name '*.avi,mp4' -type f

Imagen de nacho tineo
+1
0
-1

Buenas compañero no he dado con la sulucion exacta pero creo que te sirva por lo menos para listar.

Seria algo así:

find -name *.avi >/home/nacho/videos.log

esto te crea un log donde tu le mandes con todos los archivos .avi
find -name *.mp4 >/home/nacho/videos.log1
find -name *.wmv >/home/nacho/videos.log2
así con todos los formatos dado que no he dado con la solución para que lo haga de una vez.

Para solo listar con su tamaño puedes hacer esto.
ls -s */*.avi >/home/nacho/ls.log
ls -s */*.mp4 >/home/nacho/ls.log1

ahora solo falta hacerlo todos los archivos de una vez.
Ten encuenta desde donde ejecutas los comandos.
mi ejemplo esta probado desde :
nacho@ubuntu-11:~$ pwd
/home/nacho
saludos

pd:
find -help
ls --help

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de nacho tineo
+1
0
-1

Ahora vamos a hacer una búsqueda de todos los archivos .avi o .mpg y crea un log.

find -name '*.mpg' -o -name '*.avi' >/home/nacho/find.log

pero lo que no logro es que cree un log con los archivos que encontró y los liste con el tamaño.

Seria algo de esto:

find -name *.avi |xargs ls -s "*.avi" >/home/nacho/ls.log

pero no me saca todos los archivos da error
ls: no se puede acceder a digital: No existe el fichero o el directorio
solo lista unos pocos.
Otra de las cosas que intente es :

find -name '*.avi' -exec ls -s {}\; >/home/nacho/ls.log

Pero me da este error.
find: falta un parámetro para «-exec»

Haber si sale alguien que entienda mas

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de nacho tineo
+1
0
-1

find -iname "*.avi" -printf "%f\n" >/home/nacho/ls-log

esto solo lista los nombres de los archivos sin la ruta.

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de Scorpyo82
+1
0
-1

find -name *.avi |xargs ls -s "*.avi" >/home/nacho/ls.log

pero no me saca todos los archivos da error

Has probado a usar "tee"

puedes intentar esto:

find -name '*.mpg' -o -name '*.avi' | tee /home/nacho/find.log

Un saludo.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de nacho tineo
+1
0
-1

find -iname '*.avi' -printf "%f\n" | tee /home/nacho/find.log
Esto me saca un log con todos los archivos de extensión .avi sin la ruta lo cual es muy útil no se por que si pongo find -name '*.mpg' -o -name '*.avi' | tee /home/nacho/find.log
no me saca los .mpg
Pero bueno solo seria cuestión de ir uno por uno que no es mucho.
Nos sigue faltando que saque el tamaño
Y no seria necesario el comando tee
find -iname "*.avi" -printf "%f\n" > /home/nacho/find.log
Gracias casi lo tenemos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de Alcruz
+1
0
-1

Te paso un script que te va a listar el peso y la ruta, o sea que faltaría filtrar la ruta para que quede solo el nombre del archivo.

#!/bin/bash
rm 222
find /media/E -iname "*.mp3" > 111
while read line; do
du -sh "$line" >>222
done < 111
gedit 222

En donde 111 es el archivo muestra las rutas absolutas de cada archivo
222 es el archivo final en el que aparece el peso y la ruta
/media/E
Es la ruta del directorio en donde realizará la búsqueda, en este caso se trata de una partición montada rn /media/E, o sea este valor lo debes adecuar a tu caso.
Observa que la cariable "$line" está entre comillas , esto es para evitar los problemas que se da cuando se tienen elementos con nombres de varias palabras, los cuales son mayoritarios en este tipo de archivos.

+1
0
-1
Imagen de nacho tineo
+1
0
-1

#!/bin/bash
rm 222
find /media/E -iname "*.mp3" -printf "%f\n" > 111
while read line; do
du -sh "$line" >>222
done < 111
gedit 222

ya me filtra solo el nombre.

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de nacho tineo
+1
0
-1

#!/bin/bash
rm 222
find /home/nacho -iname "*.avi" -printf "%f\n" > 111
while read line; do
du -sh "$line" >> 222
done < 111
gedit 222

este seria mi caso la primera parte digamos asta while la hace bien es decir crea un listado con todos los archivos *.avi pero la segunda me saca un archivo 222 vació.

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de Alcruz
+1
0
-1

Pasa que al ejecutar
find /home/nacho -iname "*.avi" -printf "%f\n" > 111
te va a generar el archivo sin ninguna ruta, entonces cuando ejecute
while read line; do
du -sh "$line" >> 222
done < 111
se va a encontrar que el comando du -sh no sabe donde buscar el archivo , por eso te generará el 222 vacío

Cabrían dos posibilidades
1.- La mejor pero no se como hacerlo, es eliminar las rutas en el archivo 222 , o sea al final de todo el proceso.
2.- Modificar el script, borrar la ruta de la carpeta de búsqueda, en mi caso /media/E y correr el script dentro de cada directorio que en este caso contengan .mp3 , el reaultado sería similar al siguiente
4,8M ./6. Ataole_rmx.mp3
2,7M ./7. Las Siete Potencias.mp3
2,3M ./5. Bomba.mp3
3,8M ./2. Huepajé.mp3

+1
0
-1
Imagen de nacho tineo
+1
0
-1

#!/bin/bash
rm /home/nacho/222.log
find /home/nacho -iname "*.avi" -printf "%f\n" > /home/nacho/111.log
while read line; do
du -sh /home/nacho/* "$line" >> /home/nacho/222.log
done < /home/nacho/111.log
gedit /home/nacho/222.log

pero esto me lista todo los directorios y archivos que estan en /home/nacho/ y no llevo manera de hacer que solo sea los archivos de video.
#!/bin/bash
rm /home/nacho/222.log
find /home/nacho -iname "*.avi" -printf "%f\n" > /home/nacho/111.log
while read line; do
du -sh /home/nacho/*.avi "$line" >> /home/nacho/222.log
done < /home/nacho/111.log
gedit /home/nacho/222.log

no funciona
saludos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de nacho tineo
+1
0
-1

#!/bin/bash
rm /home/nacho/222.log
find /home/nacho -iname "*.avi" -printf "%f\n" > /home/nacho/111.log
while read line; do
du -sh /home/nacho/*/*.avi "$line" >> /home/nacho/222.log
done < /home/nacho/111.log
gedit /home/nacho/222.log
pero me salen repetidos en el -log
ahora solo me falta que no saque la ruta entera es decir solo el nombre del archivo

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de KIKERAP
+1
0
-1

Ahi va mi comando:

ls -Rhs /home/$USER | grep -i .[.][oamw][moagvp][vi4g3]$ | tee logfile

Extensiones disponibles:
ogg,wav,mp3,avi,mp4,mpg,mov,wmv

+1
0
-1
Imagen de nacho tineo
+1
0
-1

Todo perfecto
me podrías si no es mucha molestia desmenuzar el comando es para aprender que hace cada cosa.
gracias

ls lista ; -Rhs
lista recursiva de subdirectorios
imprime tamaños en formato comprensible para humanos
imprime el tamaño asignado de cada archivo, en bloques
/home/$user es la ruta a listar

grep Busca PATRÓN en cada FICHERO o en la entrada estándar
-i considera iguales mayúsculas y minúsculas
el resto ni idea hasta tee
Copia la entrada estándar a cada FICHERO, y también a salida estándar.
Si me he confundido en algún apartado comentarlo gracias

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de KIKERAP
+1
0
-1

Es simple:
- Las opciones del ls son recursivo, que de el tamaño y que sea legible (K,M,etc). La ruta puedes poner la que quieras.
- El grep pongo que no sea case-sensitive (-i) y que me busque
. cualquier_caracter
[.] punto
[m][p][g] a continuacion pones las extensiones separadas, en este ejemplo busca los "mpg".
$ que esten al final de la linea
- El tee no tiene misterio.
Como se puede observar lo de las extensiones es una chapucilla, ya que pueden salir combinaciones de extensiones que no sean de archivos multimedia (.api,.wpg), pero normalmente lo haremos al /home/user que es donde tenemos los archivos y un usuario "normal" no creo que tenga extensiones "raras" :). He probado a meter las extensiones tal cual y me anula la funcion del "$".

Si no te importa que ocupe mas de una linea el srcipt, puedes hacerlo 100% fiable poniendo una extension cada vez (asi sin complicarte). Alguien que sepa más de expresiones regulares seguro soluciona lo de las extensiones pero yo por ahora me quedo ahi ;).

+1
0
-1
Imagen de nacho tineo
+1
0
-1

Muchas gracias yo creo que es suficiente para el problema que planteaba el compi por lo menos a mi me sirve.
ls -Rhs /home/nacho | grep -i .[.][a][v][i]$ | tee logfile
ls -Rhs /home/nacho | grep -i .[.][m][p][4]$ | tee logfile1
Creo que esto seria suficiente para el compañero esperemos nos diga algo jjj eso si cambiando el directorio por el que sea en su caso.
Nunca te acostaras sin saber una cosa mas.

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de KIKERAP
+1
0
-1

Si se pone cada extensión por separado tampoco hace falta poner la expresión [ ], quedaria tal que así:

#!/bin/bash
ls -Rhs /home/$USER 2> /dev/null | grep -i .[.]mp4$ > logfile
ls -Rhs /home/$USER 2> /dev/null | grep -i .[.]avi$ >> logfile
less logfile

+1
0
-1
Imagen de Egoitz808
+1
0
-1

Hola a todos.
Muchas gracias por el tiempo y las respuestas. Es un placer tener personas dispuestas a ayudar. Creo que se ha solucionado la cosa.
Muchas Gracias de nuevo.

+1
0
-1
Imagen de nacho tineo
+1
0
-1

Me alegro que se solucione puedes modificar el pos y poner solucionado.
saludos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)