Reto
2008-08-16 10:02:56-05
Hacks
¿Cómo le haces para cambiar la extensión de un grupo de archivos?
Obviamente no con el siguiente:
% mv *.sh *.txt
ni tampoco con el siguiente:
% find . -maxdepth 1 -type f -name '*.sh' -exec mv {} {}.txt \;
ya que quedarían muy feos al tener ahora la extensión '*.sh.txt'.
Permalink: http://www.mononeurona.org/users/entry/asarch/1507
Comentblogs:1.-
rnstux wrote:
Primis primis!!:
Creamos los archivos:
rnstux@server:~$ touch 1.txt
rnstux@server:~$ touch 2.txt
rnstux@server:~$ touch 3.txt
Corremos el siguiente comando:
rnstux@server~:for ARCHIVO in *.txt ; do NUEVOARCHIVO=`echo $FILE | sed 's/.txt$//'` ; mv $ARCHIVO $NUEVOARCHIVO.sh ; done
Explicación:
1-Se inicia un ciclo for, en donde la variable archivo tomara el nombre de nuestro primer archivo de tipo .txt, es decir: "1.txt"
for ARCHIVO in *.txt
2-do NUEVOARCHIVO=`echo $ARCHIVO | sed 's/.txt$//'`
Después de inicializar la variable con el nombre del archivo, crea otra variable denominada NUEVOARCHIVO y le asigna el valor de la variable ARCHIVO, a la cual con el comando sed 's/.txt$//'` le eliminamos la extensión, es decir el lugar de llamarse "1.txt" se llamara "1",
3-Ahora le agregamos la extensón que deseamos :)
mv $ARCHIVO $NUEVOARCHIVO.sh ; done
2008-08-16 11:25:25-05
Primis primis!!:
Creamos los archivos:
rnstux@server:~$ touch 1.txt
rnstux@server:~$ touch 2.txt
rnstux@server:~$ touch 3.txt
Corremos el siguiente comando:
rnstux@server~:for ARCHIVO in *.txt ; do NUEVOARCHIVO=`echo $FILE | sed 's/.txt$//'` ; mv $ARCHIVO $NUEVOARCHIVO.sh ; done
Explicación:
1-Se inicia un ciclo for, en donde la variable archivo tomara el nombre de nuestro primer archivo de tipo .txt, es decir: "1.txt"
for ARCHIVO in *.txt
2-do NUEVOARCHIVO=`echo $ARCHIVO | sed 's/.txt$//'`
Después de inicializar la variable con el nombre del archivo, crea otra variable denominada NUEVOARCHIVO y le asigna el valor de la variable ARCHIVO, a la cual con el comando sed 's/.txt$//'` le eliminamos la extensión, es decir el lugar de llamarse "1.txt" se llamara "1",
3-Ahora le agregamos la extensón que deseamos :)
mv $ARCHIVO $NUEVOARCHIVO.sh ; done
2008-08-16 11:25:25-05
3.-
asarch wrote:
rnstux@server~:for ARCHIVO in *.txt ; do NUEVOARCHIVO=`echo $FILE | sed 's/.txt$//'` ; mv $ARCHIVO $NUEVOARCHIVO.sh ; done
Ups, un error, en ningun lugar declaraste la variable $FILE:
"echo $FILE | sed ...".
En lugar de eso debiste de haber tecleado:
"echo $ARCHIVO | sed..."
:-P
2008-08-16 13:09:00-05
rnstux@server~:for ARCHIVO in *.txt ; do NUEVOARCHIVO=`echo $FILE | sed 's/.txt$//'` ; mv $ARCHIVO $NUEVOARCHIVO.sh ; done
Ups, un error, en ningun lugar declaraste la variable $FILE:
"echo $FILE | sed ...".
En lugar de eso debiste de haber tecleado:
"echo $ARCHIVO | sed..."
:-P
2008-08-16 13:09:00-05
4.-
thot wrote:
SerÃa bueno que pusieras especÃficamente todas las restricciones al problema.
Una forma podrÃa ser esta:
for f in *.sh; do mv $f ${f%.txt}.py; done
2008-08-16 16:07:08-05
SerÃa bueno que pusieras especÃficamente todas las restricciones al problema.
Una forma podrÃa ser esta:
for f in *.sh; do mv $f ${f%.txt}.py; done
2008-08-16 16:07:08-05
5.-
rnstux wrote:
Ooops!..Lo sieno asarch!---Pero en la parte de la explicación ya viene corregido :P
2008-08-16 19:20:34-05
Ooops!..Lo sieno asarch!---Pero en la parte de la explicación ya viene corregido :P
2008-08-16 19:20:34-05
8.-
asarch wrote:
De hecho... no. Es lo mismo que el:
find . -maxdepth 1 -type f -name '*.sh' -exec mv {} {}.py \;
Ya que deja a los archivos con la extension fea de '*.sh.py'.
2008-08-16 21:07:06-05
De hecho... no. Es lo mismo que el:
find . -maxdepth 1 -type f -name '*.sh' -exec mv {} {}.py \;
Ya que deja a los archivos con la extension fea de '*.sh.py'.
2008-08-16 21:07:06-05
10.-
rnstux wrote:
Ooops!! Mandrake dejo su sesión abierta :P
Soy el ganador :P..Cual es el premio??
2008-08-16 21:20:40-05
Ooops!! Mandrake dejo su sesión abierta :P
Soy el ganador :P..Cual es el premio??
2008-08-16 21:20:40-05
11.-
rayado wrote:
Con XFCE, Menú, Sistema, Renombrador Masivo.
2008-08-17 09:46:36-05
Con XFCE, Menú, Sistema, Renombrador Masivo.
2008-08-17 09:46:36-05
12.-
thot wrote:
No creo asarch, lo he probado y no me da ningún problema. El operador % elimina la parte final de la cadena si coincide con la parte que se encuentra después del operador.
2008-08-17 10:22:54-05
No creo asarch, lo he probado y no me da ningún problema. El operador % elimina la parte final de la cadena si coincide con la parte que se encuentra después del operador.
2008-08-17 10:22:54-05
13.-
thot wrote:
Qué tonto escribà el otro ejemplo:
for f in *.sh; do mv $f ${f%.sh}.py; done
Corrección, porque mandé una de las pruebas que hice. :P.
thot@shunashi:~/prueba$ ls
a1.sh a2.sh adafs.sh b.sh
thot@shunashi:~/prueba$ for f in *.sh; do mv $f ${f%.sh}.py; done
thot@shunashi:~/prueba$ ls
a1.py a2.py adafs.py b.py
thot@shunashi:~/prueba$
2008-08-17 10:26:05-05
Qué tonto escribà el otro ejemplo:
for f in *.sh; do mv $f ${f%.sh}.py; done
Corrección, porque mandé una de las pruebas que hice. :P.
thot@shunashi:~/prueba$ ls
a1.sh a2.sh adafs.sh b.sh
thot@shunashi:~/prueba$ for f in *.sh; do mv $f ${f%.sh}.py; done
thot@shunashi:~/prueba$ ls
a1.py a2.py adafs.py b.py
thot@shunashi:~/prueba$
2008-08-17 10:26:05-05
14.-
ficovh wrote:
Pase por aqui, y le entre al ruedo.
$ touch 1.txt 2.txt 3.txt 5.txt
ls -1 *.txt | sed "s/\(.*\)\.txt$/mv '&' '\1.sh'/" | sh
ls -1 *.sh
# lista solo una entrada por linea.
Sed toma la salida de ls, busca en todos los archivos ocurrencias .txt y empieza a mover (ren) cada uno en background a su equivalente .sh, la salida finalmente se pasa al shell (sh default) para que procese toda la cadena.
;)
P.S. Pongamoslo en hacks en el wiki de NetBSD MX
ficovh
2008-08-18 02:54:17-05
Pase por aqui, y le entre al ruedo.
$ touch 1.txt 2.txt 3.txt 5.txt
ls -1 *.txt | sed "s/\(.*\)\.txt$/mv '&' '\1.sh'/" | sh
ls -1 *.sh
# lista solo una entrada por linea.
Sed toma la salida de ls, busca en todos los archivos ocurrencias .txt y empieza a mover (ren) cada uno en background a su equivalente .sh, la salida finalmente se pasa al shell (sh default) para que procese toda la cadena.
;)
P.S. Pongamoslo en hacks en el wiki de NetBSD MX
ficovh
2008-08-18 02:54:17-05
15.-
asarch wrote:
¡Bienvenido ficovh!
Una solución a esto serÃa (si estás usando el C Shell):
% foreach file ( *.sh )
> mv $file ${file:t}
> end
El detalle es que si hay archivos asi
file1.sh.txt.py.pl.csh.log
no puedo hacer que sean ahora asi:
file1.csh
2008-08-18 10:05:32-05
¡Bienvenido ficovh!
Una solución a esto serÃa (si estás usando el C Shell):
% foreach file ( *.sh )
> mv $file ${file:t}
> end
El detalle es que si hay archivos asi
file1.sh.txt.py.pl.csh.log
no puedo hacer que sean ahora asi:
file1.csh
2008-08-18 10:05:32-05










