Ayuda con script para listar archivos multimedia o utilizando grep para listar archivos avi o mp4 *Solucionado

Imagen de marcosvega1
0 puntos

Hola:

Estoy intentando crear un script y una de las cosas que quiero es que se listen los archivos de una carpeta y solo me aparezcan los de extensión .avi y .mp4 o si es mejor que me aparezcan listados solo los archivos multimedia que pueden ser reproducidos por vlc.

Lo que yo he intentando hacer para que me liste solo los archivos de terminacion avi y mp4 es:

ls -S | grep .avi || grep .mp4

Uso "||" porque tengo entendido que funciona como OR y corríjanme si me equivoco pero tengo entendido que el OR lo que hace es que si cumple en uno y en otro no aún así regresa el resultado a diferencia del AND en el que debe cumplir en ambos.

Por favor ayuda =D

Gracias

PD. Si tienen respuesta a lo de listar los archivos multimedia solamente para mi es mejor, pero pienso que es más sencillo centrarme solo en .avi y .mp4.

Imagen de slap
+1
0
-1

Si quieres usar grep, puedes hacerlo con:

ls -S | grep -E '\.avi$|\.mp4$'

o bien:

ls -S | egrep '\.avi$|\.mp4$'

Pero lo puedes obtener directamente con:

ls -S *.{avi,mp4}

Saludos.


0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://7grados.injiniero.es

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de marcosvega1
+1
0
-1

Muchas Gracias
Las tres opciones que me dices me sirven mucho y la última es la que más me agradó no sabía que existía esto: {avi,mp4}

Gracias de nuevo

+1
0
-1
Imagen de gotxa
+1
0
-1

hola,
me ha llamado la atención el origen de tu pregunta: listar los archivos que vlc puede reproducir. La teoría de la cuestión tiene interesantes aplicaciones.

A esto es a lo que he llegado a modo de fastidio al buen hacer de slap (elegantemente breve):

$ egrep "^." /usr/lib/mime/packages/vlc | \
  awk -F ";" '{print $1}' | \
  sort -u | \
  awk '{print "grep "$0" /usr/share/mime/globs"}' | \
  sh | \
  awk -F ":" '{print "ls -S "$2}' | \
  sh

El truco aquí es considerar que vlc maneja los mime-type que dice /usr/lib/mime/packages/vlc y que gnome considera las extensiones por mime-type según /usr/share/mime/globs. Un vistazo a estos ficheros revelará como fácil el método que he seguido.

En mi caso funciona bien excepto en el home, que lista el directorio ~/.qt y casualmente es una de las extensiones de Quicktime video. Se puede añadir por ahí enmedio un grep -vw ".qt" para evitarlo, o incluso mejor un listado que no incluya directorios.

Nota que no se seguro al 100% si estos ficheros son los más adecuados en determinar las extensiones que maneja vlc. Sin duda hay mejor método de aproximación al problema y de realización. Se agradecen correcciones.

Por un pingüino liante
GoTXa
linux counter #116453
Klaatu barada nikto

+1
0
-1

GoTXa
linux counter #116453
Klaatu barada nikto

Imagen de slap
+1
0
-1

Muy buena aportación, gotxa.
¿Eres fontanero? Lo digo por tu dominio con las tuberías. ;)

Para evitar listar los directorios y añadir una búsqueda recursiva se me ocurre esto:

  egrep "^." /usr/lib/mime/packages/vlc | \
  awk -F ";" '{print $1}' | \
  sort -u | \
  awk '{print "grep "$0" /usr/share/mime/globs"}' | \
  sh | \
  awk -F ":" '{print "find . -type f -name '\''"$2"'\''"}' | \
  sh

Saludos.


0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://7grados.injiniero.es

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de marcosvega1
+1
0
-1

Gracias lo probaré en un momento y te digo lo sucedido. Se me había ocurrido también lo de mime pero no se me ocurrió como cortar a solamente las extensiones que reproduce vlc ya que no soy un maestro del bash script. Probaré tu sugerencia más al rato (porque ahora ando ocupado) y te cuento lo sucedido.

Muchas gracias
Saludos

+1
0
-1
Imagen de marcosvega1
+1
0
-1

Hice las pruebas y sí me devolvía lo que quería aunque no se porqué no me funcionó la opción de slap :S alguna comilla de más o no sé. También hice mi propia modificación para que solo listara las extensiones con asterisco. Cambié ls -S por echo y funcionó, así quedó:

egrep "^." /usr/lib/mime/packages/vlc | \
  awk -F ";" '{print $1}' | \
  sort -u | \
  awk '{print "grep "$0" /usr/share/mime/globs"}' | \
  sh | \
  awk -F ":" '{print "echo "$2}' | \
  sh

y el resultado devuelto fue:

*.ogg
*.ogx
*.mpga
*.mp3
*.wav
*.wvc
*.wvp
*.wv
*.mpeg
*.vob
*.m2t
*.mp2
*.mpe
*.mpg
*.moov
*.qt
*.mov
*.qtvr
*.avi
*.divx

Pero pues se nota que se mantuvo prácticamente toda la aportación de gotxa y con la modificación de slap comprendí el código xD y fue cuando se me ocurrió usar echo.

Gracias a ambos :D
Saludos

+1
0
-1
Imagen de gotxa
+1
0
-1

Si te digo la verdad, a mi me gustaba la idea de ordenar por orden de tamaño los archivos multimedia con ls -S (útil cuando los discos están a tope, o sea: casi siempre).

Las 2 cosas que no me gustaban era el problema de los directorios y el que salga un error cuando se busca un archivo con un cast concreto y no se encuentra ("ls: no se puede acceder a loquesea: No existe el fichero ó directorio").

Probé con la opción recursiva del listado, me parece también interesante (como hace la versión de slap) pero entonces el problema surge con el órden por tamaño dentro de cada directorio; en cierta manera las 2 ordenaciones son relativamente excluyentes. En fin, para estos menesteres mejor un pequeño script que un comando.

Al lío. Lo dejo a mi gusto haciendo

$ egrep "^." /usr/lib/mime/packages/vlc            | \
  awk -F ";" '{print $1}'                          | \
  sort -u                                          | \
  awk '{print "grep "$0" /usr/share/mime/globs"}'  | \
  sh                                               | \
  awk -F ":" '{print "ls -ldS "$2" 2>/dev/null"}'  | \
  sh                                               | \
  egrep -v "^d"                                    | \
  sed -e "s/^.*:.. //g"

Evitamos que nos liste el contenido de los directorios (opción -d de ls) y los directorios propiamente dichos (evitando sacar lineas con una d al principio del listado largo). Así, puede haber directorios de nombre tipo 'laspelis.avi' y no los mostrará.

Nota que aquí he pasado por el listado largo para aprovechar la ordenación de ls y evitar los directorios. Como contrapartida, con sed elimino de cada linea desde el inicio hasta un espacio después de la hora (o sea, dejar sólo el nombre aunque tenga espacios, razón por la que no vuelvo a utilizar awk).

Con la redirección de los errores de ls a /dev/null nos quitamos el problema de avisos de archivos no encontrados.

Por un pingüino que se expresa regular ;D
GoTXa
linux counter #116453
Klaatu barada nikto

+1
0
-1

GoTXa
linux counter #116453
Klaatu barada nikto