seleccion de archivos de manera aleatoria en bash???
Pablo Salinas Rivera
psalinasrivera en gmail.com
Lun Dic 12 03:51:37 CLST 2005
Carlos Moyano Cubillos wrote:
> 2005/12/11, German Poo Caaman~o <gpoo en ubiobio.cl>:
>>El dom, 11-12-2005 a las 12:03 -0500, Jesus Aneiros Sosa escribió:
>>>On Sat, 10 Dec 2005, Carlos Moyano Cubillos wrote:
>>>>ls -RQ /mnt/respaldo/musica | grep .mp3
> esto me da buen resultado, todos los mp3 contenidos en el directorio
> musica y sus subdirectorios.
>>>Creo que mas preciso seria
>>>
>>>ls -RQ /mnt/respaldo/musica | grep '.mp3$'
> esto no me da ni una salida a pantalla, la verdad no se que quiere
> decir el signo peso ahi.
mostrara solo las palabras _que terminen_ con el string mp3.. y no te entrega
nada porque tus string estan terminando con «.mp3"» (con comilla) y no con «.mp3»
>>Si hemos de ser precisos, entonces debiera ser:
>>
>>ls -RQ /mnt/respaldo/musica | grep '\.mp3$'
>>
>>Dado que '.' para grep significa cualquier caracter; lo
>>cual también podría ser un directorio llamado
>>'charlas-mp3' o afín :-)
>
> eso tampoco me da una salida a pantalla...
lo mismo de arriba...
> otra cosa...
>
> lo que necesito es la direccion y nombre de todos los mp3 en las
> directorios y sus subdirectorios, es decir, ruta completa.
>
> ls -RQ me da solo el nombre, lo bueno de esto es que me los da entre comillas.
>
> como podria obtener ruta completa de los mp3s pero entre comillas?
si, se puede, voy a intentarlo con un ejemplo a ver si me resulta, y cuando
tenga un reproductor mp3 talvez lo ocupe tambien ;) En el directorio actual
hago un find y obtengo:
$ find .
.
./01_Aconcagua.mp3
./Los Jaivas - Mamalluca
./Los Jaivas - Mamalluca/10 Mamalluca.MP3
./Los Jaivas - Mamalluca/09 Elqui.MP3
./Los Jaivas - Mamalluca/portada.jpg
./Los Jaivas - Mamalluca/01 Alumno.MP3
./Los Jaivas - Mamalluca/02 Uva Madura.MP3
./Los Jaivas - Mamalluca/03 Chaski.MP3
./Los Jaivas - Mamalluca/04 El Tambo.MP3
./Los Jaivas - Mamalluca/05 Camino Estrellado.MP3
./Los Jaivas - Mamalluca/06 Cerro De La Virgen.MP3
./Los Jaivas - Mamalluca/07 Gabriela.MP3
./Los Jaivas - Mamalluca/08 Interludio.MP3
./01 Pregon para iluminarse.mp3
./02 La poderosa muerte.mp3
./03 Cancion para los pajaros.mp3
./05 Un dia en tus dias.mp3
./07 Corre que te pillo.mp3
tengo archivos con mp3 (minusculas) y MP3 (mayusculas), hay archivos con
espacios en el nombre, y hay un archivo "no-mp3" (portada.jpg).
primero filtramos solo los archivos mp3 y agregamos comillas :
$ find . -type f | grep "\.[mM][pP]3$" | sed -e 's/.*/"&"/'
"./01_Aconcagua.mp3"
"./Los Jaivas - Mamalluca/10 Mamalluca.MP3"
"./Los Jaivas - Mamalluca/09 Elqui.MP3"
"./Los Jaivas - Mamalluca/01 Alumno.MP3"
... ETC....
son 16 archivos mp3, ahora la idea es meter esto a una lista.. pero el
espacio no serviria como delimitador, ocupamos el asterisco como delimitador,
ya que no se puede ocupar en nombres de archivos..
$ find . -type f | grep "\.[mM][pP]3$" | sed -e 's/.*/"&"/' | \
awk 'BEGIN{ORS="*"}{print}END{print NR}'
ORS le dice a awk cual sera el separador de registro (por defecto es un salto
de linea, aca sera el *). y con print NR imprime al final de la lista el
tamaño, (numero de archivos).
eso dejara todo _en una sola linea_, algo asi:
"./01_Aconcagua.mp3"*"./Los Jaivas - Mamalluca/10 Mamalluca.MP3"*"./Los
Jaivas - Mamalluca/09 Elqui.MP3"*.... etc etc... *16*
la sentencia anterior se asigna a la variable
LISTA=$(find . -type.... etc.. )
obtenemos el tamaño de la lista.. que quedo al final de la linea..
TAM_LISTA=$(echo $LISTA | awk 'BEGIN{FS="*"}{print $(NF-1)}')
y finalmente hacemos un ciclo hasta NN=(n° de archivos a seleccionar)
for i in {1..NN} ; do
#a awk no le sirve el num==0, imprimiria la lista completa
num=$[RANDOM*$[TAM_LISTA-1]/32767 + 1]
echo $LISTA | awk 'BEGIN{FS="*"}{print $'$num'}'
done
se podria modificar la ultima linea para que cree el comando de copia al
pendrive:
echo $LISTA | awk 'BEGIN{FS="*"}{print "cp -f "$'$num'" /mnt/pendrive/"}'
mm, parece que funciona..
--
pablo salinas rivera
usuario linux #221909 (http://counter.li.org)
Más información sobre la lista de distribución Linux