[opensuse-es] meter en una variable (array) salida de un ls
Hola NEcesito hacer una cosa en shell y por mas que miro no lo consigo a ver si me podeis ayudar. yo por comando hago. ls -l | awk '{print $9}' y eso me lista los nombres de ficheros de un dir. hay manera de meter eso en un "objeto" array o lo que fuera para luego sobre el hacer un for y por cada entrada hacer un tratamiento? me podeis ayudar? Gracias -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
El Tue, 30 Nov 2010 17:57:24 +0100, koxkorrita escribió:
No sé si es esto lo que buscas: *** #/bin/bash lista=(`ls -l | awk '{print $9}'`) echo "Array items:" for item in ${lista[*]} do echo $item done echo "Nº de elementos: ${#lista[*]}" echo "Elemento nº2: " ${lista[1]} *** Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
Muchas gracias como meteria eso en un for con un contador? tipico de java vor(int 1 =0;i<objeto.size();i++){ para así coger el valor del contador y con el hacer las cosas que tengo que hacer en elos ficheros. Muchas gracias por la ayuda
-- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
El Tue, 30 Nov 2010 19:38:44 +0100, koxkorrita escribió:
No entiendo... al definir una matriz ya tienes el contador de todos los elementos en la variable "${#lista[*]}" y puedes manipular/ejecutar las órdenes que quieras según el contenido o la posición de cada uno de los elementos. ¿Qué es lo que quieres hacer exactamente? Mejor si pones un ejemplo práctico :-) Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
lo que quiero es el resultado de `ls -l | awk '{print $9}'` que es una coleccion de ficheros meterlos en una lista para recorrermelos y a cada uno de error renombrarlos (moverlos) con un 1_ por delante donde el número 1 es un correlativo (tantos ficheros tanto sube ese número) Muchas gracias por vuestra ayuda, de veras -----Mensaje original----- De: Camaleón [mailto:noelamac@gmail.com] Enviado el: martes, 30 de noviembre de 2010 20:42 Para: opensuse-es@opensuse.org Asunto: [opensuse-es] Re: meter en una variable (array) salida de un ls El Tue, 30 Nov 2010 19:38:44 +0100, koxkorrita escribió:
No entiendo... al definir una matriz ya tienes el contador de todos los elementos en la variable "${#lista[*]}" y puedes manipular/ejecutar las órdenes que quieras según el contenido o la posición de cada uno de los elementos. ¿Qué es lo que quieres hacer exactamente? Mejor si pones un ejemplo práctico :-) Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Content-ID: <alpine.LNX.2.00.1012010156030.12914@Telcontar.valinor> El 2010-12-01 a las 00:25 +0100, koxkorrita escribió:
lo que quiero es el resultado de `ls -l | awk '{print $9}'`
Eso en mi sistema produce una guarrería: Canción 02 - -> - -> - - Y no sigo.
Pues eso en el ejemplo que te puse es una chorrada. Tienes el numeral y el nombre... for((i=0; i<$NUMEROFICHEROS; i++)) do echo $i - ${FILENAMES[$i]} mv "${FILENAMES[$i]}" "$i_${FILENAMES[$i]}" done - -- Saludos Carlos E. R. (desde 11.2 x86_64 "Emerald" en Telcontar) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.12 (GNU/Linux) iEYEARECAAYFAkz1naUACgkQtTMYHG2NR9WL0wCeK9hZNinK72g0GcFHuHYapUEP Z7UAnAmumXzUZdPIQI1r6J5gaxiCBC5Y =eb+j -----END PGP SIGNATURE-----
El Wed, 01 Dec 2010 00:25:43 +0100, koxkorrita escribió:
Ok. Pero no sería necesario una matriz para eso :-) *** #/bin/bash lista=(`ls -l | awk '{print $9}'`) conta=0 for item in ${lista[*]} do conta=`expr $conta + 1`; mv $item $conta"_"$item done *** sm01@stt008:~/Desktop/testo$ ls -l total 4 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 archivo1 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 archivo2 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 archivo3 -rw-r--r-- 1 sm01 sm01 171 dic 1 08:23 test.sh sm01@stt008:~/Desktop/testo$ sh ./test.sh sm01@stt008:~/Desktop/testo$ ls -l total 4 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 1_archivo1 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 2_archivo2 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 3_archivo3 -rw-r--r-- 1 sm01 sm01 171 dic 1 08:23 4_test.sh Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2010-11-30 a las 17:57 +0100, koxkorrita@laudio.info escribió:
Array de bash? Si. Sin comprobar, son partes alteradas de un script mio: ls tupatron > fichero declare -a FILENAMES NUMEROFICHEROS=0 while read FILES ; do NUMEROFICHEROS=`expr $NUMEROFICHEROS + 1` FILENAMES[$NUMEROFICHEROS]="$FILES" done < fichero for((i=0; i<$NUMEROFICHEROS; i++)) do echo $i - ${FILENAMES[$i]} done - -- Saludos Carlos E. R. (desde 11.2 x86_64 "Emerald" en Telcontar) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.12 (GNU/Linux) iEYEARECAAYFAkz1YHYACgkQtTMYHG2NR9XZeACaAqWu22KT/u2swWE1x9uiNPKO JQAAniKfJdgTgcM8Kjq9zlfVzyg9Fw9B =TCho -----END PGP SIGNATURE-----
El Tue, 30 Nov 2010 17:57:24 +0100, koxkorrita escribió:
No sé si es esto lo que buscas: *** #/bin/bash lista=(`ls -l | awk '{print $9}'`) echo "Array items:" for item in ${lista[*]} do echo $item done echo "Nº de elementos: ${#lista[*]}" echo "Elemento nº2: " ${lista[1]} *** Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
Muchas gracias como meteria eso en un for con un contador? tipico de java vor(int 1 =0;i<objeto.size();i++){ para así coger el valor del contador y con el hacer las cosas que tengo que hacer en elos ficheros. Muchas gracias por la ayuda
-- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
El Tue, 30 Nov 2010 19:38:44 +0100, koxkorrita escribió:
No entiendo... al definir una matriz ya tienes el contador de todos los elementos en la variable "${#lista[*]}" y puedes manipular/ejecutar las órdenes que quieras según el contenido o la posición de cada uno de los elementos. ¿Qué es lo que quieres hacer exactamente? Mejor si pones un ejemplo práctico :-) Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
lo que quiero es el resultado de `ls -l | awk '{print $9}'` que es una coleccion de ficheros meterlos en una lista para recorrermelos y a cada uno de error renombrarlos (moverlos) con un 1_ por delante donde el número 1 es un correlativo (tantos ficheros tanto sube ese número) Muchas gracias por vuestra ayuda, de veras -----Mensaje original----- De: Camaleón [mailto:noelamac@gmail.com] Enviado el: martes, 30 de noviembre de 2010 20:42 Para: opensuse-es@opensuse.org Asunto: [opensuse-es] Re: meter en una variable (array) salida de un ls El Tue, 30 Nov 2010 19:38:44 +0100, koxkorrita escribió:
No entiendo... al definir una matriz ya tienes el contador de todos los elementos en la variable "${#lista[*]}" y puedes manipular/ejecutar las órdenes que quieras según el contenido o la posición de cada uno de los elementos. ¿Qué es lo que quieres hacer exactamente? Mejor si pones un ejemplo práctico :-) Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Content-ID: <alpine.LNX.2.00.1012010156030.12914@Telcontar.valinor> El 2010-12-01 a las 00:25 +0100, koxkorrita escribió:
lo que quiero es el resultado de `ls -l | awk '{print $9}'`
Eso en mi sistema produce una guarrería: Canción 02 - -> - -> - - Y no sigo.
Pues eso en el ejemplo que te puse es una chorrada. Tienes el numeral y el nombre... for((i=0; i<$NUMEROFICHEROS; i++)) do echo $i - ${FILENAMES[$i]} mv "${FILENAMES[$i]}" "$i_${FILENAMES[$i]}" done - -- Saludos Carlos E. R. (desde 11.2 x86_64 "Emerald" en Telcontar) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.12 (GNU/Linux) iEYEARECAAYFAkz1naUACgkQtTMYHG2NR9WL0wCeK9hZNinK72g0GcFHuHYapUEP Z7UAnAmumXzUZdPIQI1r6J5gaxiCBC5Y =eb+j -----END PGP SIGNATURE-----
El Wed, 01 Dec 2010 00:25:43 +0100, koxkorrita escribió:
Ok. Pero no sería necesario una matriz para eso :-) *** #/bin/bash lista=(`ls -l | awk '{print $9}'`) conta=0 for item in ${lista[*]} do conta=`expr $conta + 1`; mv $item $conta"_"$item done *** sm01@stt008:~/Desktop/testo$ ls -l total 4 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 archivo1 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 archivo2 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 archivo3 -rw-r--r-- 1 sm01 sm01 171 dic 1 08:23 test.sh sm01@stt008:~/Desktop/testo$ sh ./test.sh sm01@stt008:~/Desktop/testo$ ls -l total 4 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 1_archivo1 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 2_archivo2 -rw-r--r-- 1 sm01 sm01 0 dic 1 08:25 3_archivo3 -rw-r--r-- 1 sm01 sm01 171 dic 1 08:23 4_test.sh Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
participants (4)
-
Camaleón
-
Carlos E. R.
-
koxkorrita
-
koxkorrita@laudio.info