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
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
una que vale
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
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
lo que encontre
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
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
uff mira que me tiene en jaque
find -iname "*.avi" -printf "%f\n" >/home/nacho/ls-log
esto solo lista los nombres de los archivos sin la ruta.
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
Has probado a usar
Has probado a usar "tee"
puedes intentar esto:
Un saludo.
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.
gracias
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
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
Te paso un script que te va a
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.
si le ponemos esto?
#!/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.
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
a medias
#!/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ó.
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
Pasa que al ejecutarfind
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
casi
#!/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
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
este si me saca el tamaño
#!/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
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
Ahi va mi comando
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
si señor eso mismo es lo que pedia el compi
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
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
Explicación
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 ;).
ok
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.
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)
Otra forma
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
Muchas Gracias
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.
ok
Me alegro que se solucione puedes modificar el pos y poner solucionado.
saludos
La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)