LinuxParty
Si desea cambiar rápidamente el nombre de varios archivos en un directorio, deberá utilizar (puede hacerlo en un script) la sentencia for
en ub bucle (a veces en combinación con otras utilidades como sed
o tr
)
Los ejemplos de este artículo incluyen la eliminación de los espacios de nombres de archivo, añadir y eliminar sufijos y prefijos, y cambiar de mayúsculas a minúsculas.
Aquí está una lista completa de los ejemplos que voy a tener en cuenta:
- Eliminar los espacios de nombres de archivo
- Alternativa para quitar los espacios de nombres de archivo
- Añadir un sufijo
- Añadir un prefijo
- Eliminar un prefijo
- Eliminar un sufijo
- De mayúsculas a minúsculas
- De mayúsculas a minúsculas (sólo sufijo)
- Una situación poco probable
Quitar / Cambiar los espacios de nombres de archivo
Tengo algunos archivos mp3 imaginarios con espacios en los nombres de archivo. Los espacios en los nombres de archivo son una mala idea. Es un inconveniente, los espacios son delimitadores entre los argumentos de la línea de comandos y los archivos que usted está poniendo a cabo a través de Internet, pueden causar otros problemas, así que vamos a deshacernos de estos espacios como una cuestión de principios. (¿Quien tubo las estúpida idea de poner espacios en los nombres de archivo?)
$ ls -l
total 468 -rw-r--r-- 1 rob rob 15015 2006-10-20 11:18 01 - Some Song.mp3 -rw-r--r-- 1 rob rob 17313 2006-10-20 11:18 02 - Another Song.mp3 -rw-r--r-- 1 rob rob 17381 2006-10-20 11:19 03 - Yet Another Song.mp3 -rw-r--r-- 1 rob rob 410075 2006-10-20 11:19 04 - A New Song.mp3 -rw-r--r-- 1 rob rob 7327 2006-10-20 11:19 05 - Some Instrumental Piece.mp3
Voy a cambiar los espacios por subrayado. Como yo no quiero echar a perder las cosas, voy a ser cauteloso, para empezar:
$ for FILE in *.mp3 ; do NEWFILE=`echo $FILE | sed 's/ /_/g'` ; echo "$FILE will be renamed as $NEWFILE" ; done
01 - Some Song.mp3 will be renamed as 01_-_Some_Song.mp3 02 - Another Song.mp3 will be renamed as 02_-_Another_Song.mp3 03 - Yet Another Song.mp3 will be renamed as 03_-_Yet_Another_Song.mp3 04 - A New Song.mp3 will be renamed as 04_-_A_New_Song.mp3 05 - Some Instrumental Piece.mp3 will be renamed as 05_-_Some_Instrumental_Piece.mp3
Esto se ve bien, así que voy a intentarlo de verdad.
$ for FILE in *.mp3 ; do NEWFILE=`echo $FILE | sed 's/ /_/g'` ; mv "$FILE" $NEWFILE ; done
$ ls -l
total 468 -rw-r--r-- 1 rob rob 15015 2006-10-20 11:18 01_-_Some_Song.mp3 -rw-r--r-- 1 rob rob 17313 2006-10-20 11:18 02_-_Another_Song.mp3 -rw-r--r-- 1 rob rob 17381 2006-10-20 11:19 03_-_Yet_Another_Song.mp3 -rw-r--r-- 1 rob rob 410075 2006-10-20 11:19 04_-_A_New_Song.mp3 -rw-r--r-- 1 rob rob 7327 2006-10-20 11:19 05_-_Some_Instrumental_Piece.mp3
Me doy cuenta de que hay una forma alternativa, utilizando tr
, que es más fácil (para escribir ). Sin embargo, yo diría que el principio la técnica anterior (usando sed
) se puede aplicar a más situaciones, por lo que es más útil como una plantilla.
Para aquellos que no están familiarizados con la línea de comandos, voy a descomponerlo en sus componentes constitutivos. Si está familiarizado con este tipo de cosas, no dude en pasar a los otros ejemplos .
Este no es el lugar para hablar for
en gran detalle. Hay un montón de recursos en Internet para ese tipo de cosas. Cuando yo estaba empezando a aprender estas cosas, siempre me pareció un análisis detallado de estas cosas confusas, y que la mejor manera de aprender es hacerlo en realidad.
for FILE in *.mp3
En esta parte del bucle, FILE
es la variable y *.mp3
es el argumento. El bucle for
genera una variable para cada argumento hasta que no quedan argumentos. En el ejemplo anterior, las variables generadas son todos los archivos que coincidan con la expresión regular *.mp3
, en otras palabras:
01 - Algunos Song.mp3 02 - Otra Song.mp3 03 - Sin embargo, otro Song.mp3 04 - Un Nuevo Song.mp3 05 - Algunos Piece.mp3 Instrumental
; do
El punto y coma es un carácter especial que le permite terminar un comando y ejecutar otro comando en la misma línea. Todo for
requiere un do
.
NEWFILE=`echo $FILE | sed 's/ /_/g'`
Ahora estoy creando una nueva variable llamada NEWFILE
. sed
se utiliza para reemplazar cada espacio en el nombre del archivo mp3 referenciado en FILE
con un guión (s/ /_/g
), por lo que la variable NEWFILE
es lo mismo que FILE
, excepto el valor de cada variable de cada espacio ha sido sustituido por un guión bajo.
La siguiente parte es el comando que queremos ejecutar en cada argumento:
mv "$FILE" $NEWFILE
Renombra el contenido del valor de la variable $FILE a $NEWFILE, al estar dentro del lazo (do...done) se renombrará cada valor de la primera variable en el valor de la segunda variable hasta que se quede sin argumentos.
; done
Por último, todos los do
requiere un done
.
Estos son algunos otros ejemplos.
Alternativa para quitar los espacios de nombres de archivo
$ ls -l
total 468 -rw-r--r-- 1 rob rob 15015 2006-10-20 11:18 01 - Some Song.mp3 -rw-r--r-- 1 rob rob 17313 2006-10-20 11:18 02 - Another Song.mp3 -rw-r--r-- 1 rob rob 17381 2006-10-20 11:19 03 - Yet Another Song.mp3 -rw-r--r-- 1 rob rob 410075 2006-10-20 11:19 04 - A New Song.mp3 -rw-r--r-- 1 rob rob 7327 2006-10-20 11:19 05 - Some Instrumental Piece.mp3
Añadir un sufijo a varios archivos
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices
En este ejemplo, me gustaría añadir un sufijo .txt
a cada archivo en este directorio.
No necesitamos sed
aquí:
$ for FILE in * ; do mv $FILE $FILE.txt ; done
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra.txt -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus.txt -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations.txt -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry.txt -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices.txt
Añadir un prefijo
Tomando los archivos del ejemplo anterior:
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra.txt -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus.txt -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations.txt -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry.txt -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices.txt
Me gustaría añadir un maths_
prefijo a cada archivo:
$ for FILE in * ; do mv $FILE maths_$FILE ; done
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 maths_algebra.txt -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 maths_calculus.txt -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 maths_equations.txt -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 maths_geometry.txt -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 maths_matrices.txt
Eliminar un prefijo
Siguiendo con los archivos que hemos estado utilizando:
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 maths_algebra.txt -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 maths_calculus.txt -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 maths_equations.txt -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 maths_geometry.txt -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 maths_matrices.txt
He cambiado de opinión respecto al prefijo maths_
y quiero eliminarlo.
$ for FILE in * ; do NEWFILE=`echo $FILE | sed 's/^maths_//'` ; mv $FILE $NEWFILE ; done
$ ls -l
total de 20 -Rw-r - r - 1 rob rob 733 2006-10-20 13:23 algebra.txt -Rw-r - r - 1 rob rob 194 2006-10-20 13:23 calculus.txt -Rw-r - r - 1 rob rob 117 2006-10-20 13:23 equations.txt -Rw-r - r - 1 rob rob 402 2006-10-20 13:23 geometry.txt -Rw-r - r - 1 rob rob 50 2006-10-20 13:23 matrices.txt
El símbolo ^
en sed
indica que debe coincidir con el comienzo de una línea.
Eliminar un sufijo
Mientras estoy en ello, creo que voy a quitar el sufijo también.
$ for FILE in *.txt ; do NEWFILE=`echo $FILE | sed 's/.txt$//'` ; mv $FILE $NEWFILE ; done
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices
El símbolo $
en sed
indica si coincide con el final de una línea.
De mayúsculas a minúsculas
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 ALGEBRA -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 CALCULUS -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 EQUATIONS -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 GEOMETRY -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 MATRICES
$ for FILE in * ; do mv $FILE `echo $FILE | tr '[A-Z]' '[a-z]'` ; done
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices
De mayúsculas a minúsculas (sólo sufijo)
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 Algebra.TXT -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 Calculus.TXT -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 Equations.TXT -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 Geometry.TXT -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 Matrices.TXT
$ for FILE in *.TXT ; do NEWFILE=`echo $FILE | sed 's/.TXT$/.txt/'` ; mv $FILE $NEWFILE ; done
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 Algebra.txt -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 Calculus.txt -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 Equations.txt -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 Geometry.txt -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 Matrices.txt
Una situación poco probable
Por último, una situación poco probable. Tengo un montón de archivos con múltiples espacios y sufijos capitalizados. Quiero que los espacios cambien a un guión, salvo cuando haya dos o más espacios consecutivos, en el que necesito un solo subrayado. Mientras estamos en ello, si un espacio está al lado del punto de un prefijo, vamos a quitarlo. También quiero hacer los sufijos minúsculas. Hmm.
$ ls -l
total 20 -rw-r--r-- 1 rob rob 201 2006-10-23 23:44 A file with many spaces.TXT -rw-r--r-- 1 rob rob 1579 2006-10-23 23:44 Another wierdly named file.TXT -rw-r--r-- 1 rob rob 1452 2006-10-23 23:44 My mate Arron spels beter than this.txt -rw-r--r-- 1 rob rob 924 2006-10-23 23:44 Not really.TXT -rw-r--r-- 1 rob rob 379 2006-10-23 23:44 Whoo named this .TXT
I'm not going to try to correct the spelling as well!
$ for FILE in * ; do NEWFILE=`echo $FILE | sed -e 's/.TXT$/.txt/' -e 's/[ ]*[ ]/_/g' -e 's/_[.]/./g'` ; mv "$FILE" $NEWFILE ; done
$ ls -l
total 20 -rw-r--r-- 1 rob rob 201 2006-10-23 23:44 A_file_with_many_spaces.txt -rw-r--r-- 1 rob rob 1579 2006-10-23 23:44 Another_wierdly_named_file.txt -rw-r--r-- 1 rob rob 1452 2006-10-23 23:44 My_mate_Arron_spels_beter_than_this.txt -rw-r--r-- 1 rob rob 924 2006-10-23 23:44 Not_really.txt -rw-r--r-- 1 rob rob 379 2006-10-23 23:44 Whoo_named_this.txt
Este es una opción más compleja...
Queremos renombrar todos los archivos con un número delante, y que todos los archivos midan igual, cambiando simplemente la extensión, para eso creamos esta expresión:
EXT=".png" ; NUM=000 ; for FILE in *$EXT ; do NUM=`expr $NUM + 10` ; NEWFILE="$NUM-Imagen$EXT" ; echo " $FILE será renombrado como $NEWFILE" ; mv "$FILE" "$NEWFILE" ; done ; for B in *$EXT ; do A=`echo $B | wc -c` ; A=`expr $A - 1` ; if [ "$A" -eq 12 ]; then mv "$B" "000$B" ; fi ; done ; for B in *$EXT ; do A=`echo $B | wc -c` ; A=`expr $A - 1` ; if [ "$A" -eq 13 ]; then mv "$B" "00$B" ; fi ; done ; for B in *$EXT ; do A=`echo $B | wc -c` ; A=`expr $A - 1` ; if [ "$A" -eq 14 ]; then mv "$B" "0$B" ; fi ; done
Este es el resultado:
[javier@localhost ~]$ ll Imágenes/
total 9124
-rw-rw-r-- 1 javier javier 171971 may 5 2020 0010-Imagen.jpg
-rw-r--r-- 1 javier javier 68429 jul 8 2020 0010-Imagen.png
-rw-rw-r-- 1 javier javier 108624 ene 28 2020 0020-Imagen.jpg
-rw-r--r-- 1 javier javier 48006 sep 30 2019 0020-Imagen.png
-rw-rw-r-- 1 javier javier 183708 ago 31 2020 0030-Imagen.jpg
-rw-r--r-- 1 javier javier 146287 sep 5 2019 0030-Imagen.png
-rw-r--r-- 1 javier javier 146287 sep 5 2019 0040-Imagen.png
-rw-r--r-- 1 javier javier 186685 sep 10 2019 0050-Imagen.png
-rw-r--r-- 1 javier javier 30000 oct 17 2019 0060-Imagen.png
-rw-rw-r-- 1 javier javier 2385 may 23 2020 0070-Imagen.png
-rw-r--r-- 1 javier javier 5011 jul 30 2021 0080-Imagen.png
-rw-r--r-- 1 javier javier 97252 feb 23 2020 0090-Imagen.png
-rw-r--r-- 1 javier javier 27753 may 26 2020 0100-Imagen.png
-rw-rw-r-- 1 javier javier 14747 may 26 2020 0110-Imagen.png
-rw-rw-r-- 1 javier javier 2434058 ago 23 2018 0120-Imagen.png
-rw-r--r-- 1 javier javier 407061 feb 23 2020 0130-Imagen.png
-rw-r--r-- 1 javier javier 373614 feb 23 2020 0140-Imagen.png
-rw-r--r-- 1 javier javier 806877 feb 23 2020 0150-Imagen.png
-rw-r--r-- 1 javier javier 251047 feb 23 2020 0160-Imagen.png
-rw-r--r-- 1 javier javier 575603 feb 23 2020 0170-Imagen.png
-rw-r--r-- 1 javier javier 448732 feb 23 2020 0180-Imagen.png
-rw-r--r-- 1 javier javier 467898 ago 5 2020 0190-Imagen.png
-rw-r--r-- 1 javier javier 545597 ago 5 2020 0200-Imagen.png
-rw-r--r-- 1 javier javier 312815 sep 15 2020 0210-Imagen.png
-rw-r--r-- 1 javier javier 62574 nov 6 2020 0220-Imagen.png
-rw-r--r-- 1 javier javier 66327 nov 6 2020 0230-Imagen.png
-rw-r--r-- 1 javier javier 1175928 dic 21 2020 0240-Imagen.png
drwxrwxr-x 2 javier javier 4096 nov 4 2020 1tmp
drwxrwxr-x 3 javier javier 12288 ago 24 2020 Fondos-Pantalla
drwxrwxr-x 2 javier javier 4096 jun 11 2018 IN-TRABAJO
drwxrwxr-x 4 javier javier 12288 jul 21 13:09 smplayer_screenshots
drwxrwxr-x 2 javier javier 4096 jun 8 2021 tmp
[javier@localhost ~]$
Eso fue un poco artificial, pero sí ofrece un ejemplo de la potencia de la línea de comandos.
Tenga en cuenta que algunas personas pagan por este tipo de funcionalidad. Eso sí, tenga en cuenta su opción .
apéndice
Dar a todos los archivos el mismo nombre, pero con un número diferente parece, bueno, tonto, pero vamos a hacerlo de todos modos. Los paréntesis son también una mala idea para los nombres de archivo, pero esto es sólo un ejercicio.
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices
$ NUM=0 ; for FILE in * ; do NUM=`expr $NUM + 1` ; mv $FILE foolish\($NUM\) ; done
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 foolish(1) -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 foolish(2) -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 foolish(3) -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 foolish(4) -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 foolish(5)
¿Qué sería más útil mantener el nombre original y separar el número secuencial con un subrayado
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices
$ NUM=0 ; for FILE in * ; do NUM=`expr $NUM + 1` ; mv $FILE ${FILE}_$NUM ; done
$ ls -l
total 20 -rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra_1 -rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus_2 -rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations_3 -rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry_4 -rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices_5
No deje de leer nuestro estupendo tutorial sobre expresiones regulares.
Expresiones Regulares en Linux
-
Linux
- Cambiar la Hora y la Fecha al sistema Linux
- Montar un directorio remoto, vía NFS, en Linux
- Predicciones de Linux para 2025
- Elementary OS 8: una distribución de Linux para usuarios de Windows y macOS
- Renombrar multiples archivos masivamente en Linux (quitar espacios, cambiar mayúsculas) a la vez en Linux
- He utilizado Linux durante 30 años. Aquí hay 5 razones por las que nunca cambiaré a Windows o MacOS
- Mis predicciones sobre Linux para 2025: será un buen año
- ¿Por qué Torvalds eliminó a los encargados rusos del mantenimiento del núcleo de Linux?
- 10 cosas que siempre hago después de instalar Linux (y por qué tú también deberías hacerlo)
- 7 cosas que nunca hago después de instalar Linux (y por qué tú tampoco deberías)
- Detección de Intrusos: Snort, Base, MySQL, y Apache2 en Ubuntu Linux 7.10
- ¿Por qué no más personas usan Linux en el escritorio? Tengo una teoría que quizás no te guste.
- Los países occidentales ricos lideran la expansión mundial del petróleo y el gas
- Systemd 256.1 aborda la queja de que 'systemd-tmpfiles' podría eliminar inesperadamente su directorio /home
- Por qué un kernel Linux de distribución 'congelada' no es la mejor opción para la seguridad
Comentarios
Muy buen aporte me estas salvando la vida ;)
Una consulta:
¿como seria el siguiente caso?
Tengo estos files:
-rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra.mp4
-rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus.mp4
-rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations.mp4
-rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry.mp4
-rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices.mp4
Y desearia pasar a esto:
-rw-r--r-- 1 rob rob 733 2006-10-20 13:23 algebra_VOSE_20.mp4
-rw-r--r-- 1 rob rob 194 2006-10-20 13:23 calculus_VOSE_20.mp4
-rw-r--r-- 1 rob rob 117 2006-10-20 13:23 equations_VOSE_20.mp4
-rw-r--r-- 1 rob rob 402 2006-10-20 13:23 geometry_VOSE_20.mp4
-rw-r--r-- 1 rob rob 50 2006-10-20 13:23 matrices_VOSE_20.mp4
He intentado borrando el sufijo .mp4 y luego añadir sufijo "_VOSE_20.mp4" pero no funciona :(
Mucas gracias
for FILE in *.mp4 ; do NEWFILE=`echo $FILE | sed -e 's/.MP4$/.mp4/' -e 's/[.]/_VOSE_20 ./g'` ; mv "$FILE" $NEWFILE ; done
mv: target `.mp4' is not a directory
mv: target `.mp4' is not a directory
Te invito a que te veas el artículo de Expresiones Regulares en Linux
******www.linuxparty.es/index.php/35-linux/5232-expresiones-regulares-en-linux-que-son-y-como-entenderlas
Y hagas tu el trabajo.
"target", significa "objetivo", lo que te está indicando es que estás haciendo eso en un directorio "vacío", es decir que no contiene ficheros ".mp4"
Si escribes:
echo "" > uno.mp4
echo "" > dos.mp4
echo "" > tres.mp4
y luego corres la expresión que "Expresiones" escribió para ti, verás que funciona perfectamente...
Deberías asegurarte antes de comentar...
Si hubieras cambiado el "mv" por "echo" en la expresión...
for FILE in *.mp4 ; do NEWFILE=`echo $FILE | sed -e 's/.MP4$/.mp4/' -e 's/[.]/_VOSE_20 ./g'` ; echo "$FILE" $NEWFILE ; done
Que haciendo correr muestra:
---------------------------------
dos.mp4 dos_VOSE_20 .mp4
tres.mp4 tres_VOSE_20 .mp4
uno.mp4 uno_VOSE_20 .mp4
---------------------------------
Te habrías dado cuenta que el error está en el espacio dentro de "VOSE_20 ./g", si lo suprimes (el espacio), funciona perfectamente:
dos.mp4 dos_VOSE_20.mp4
tres.mp4 tres_VOSE_20.mp4
uno.mp4 uno_VOSE_20.mp4
Quedando la expresión...
==================================
for FILE in * ; do NEWFILE=`echo $FILE | sed -e 's/.MP4$/.mp4/' -e 's/[.]/_VOSE_20 ./g'` ; mv "$FILE" $NEWFILE ; done
==================================
Muchas gracias a todos.
Siento las molestias no era mi intención robarles su tiempo.
Ahora ya me funciona e incluso me he creado algunas nuevas.
Que bonito es aprender, ¡Y conoce el poder!
Muchas gracias por la guía, una consulta, como sería para quitar espacios en directorios???
Gracias
Tienes que buscar a partir de la combinación "ls -d */" Te mostrará sólo los directorios, pues debes utilizar "ls -df1 */"
Y a partir de ahí, usas la opción, es más, debes usar:
for FILE in */ ; do NEWFILE=`echo $FILE | sed 's/ /_/g'` ; echo "$FILE will be renamed as $NEWFILE" ; done
Coloca dentro "mv $FILE $NEWFILE", lee el artículo y practica...
NUM=0 ; for FILE in * ; do NUM=`expr $NUM + 1` ; echo $FILE ${FILE}_$NUM ; done
Escribo para ver si me pueden ayudar
tengo estos archivos:
archivo1.doc.v1234567890
archivo2.doc.v2345678901
archivo3.doc.v3456789012
archivo4.doc.v4567890123
Necesito eliminar todos los sufijos después del .doc osea todo lo que esta (.v1234567890) puntos letra y numero y tienden a ser diferentes a variar no son iguales ni es un consecutivo.
Si me pueden ayudar se los agradecería muchísimo...
for FILE in archivo*.doc* ; do VAR1=`echo $FILE | sed s/'\.'/' '/g | awk {'print $1"."$2'}` ; echo $FILE, $VAR1 ; done
Después, es cambiar "ECHO" por "MV" y quedará así:
for FILE in archivo*.doc* ; do VAR1=`echo $FILE | sed s/'\.'/' '/g | awk {'print $1"."$2'}` ; mv $FILE $VAR1 ; done
Hay otras formas de hacerlo, pero yo lo hice así.
No, la pregunta está mal, la corrcta es "¿Quién tuVo la estúpida idea de poner por delante a la máquina y por detrás al humano?"
El estúpido fue el que pensó que la buena idea era que la sintaxis informática chocara con la humana en vez de buscar vías alternativas que no interfirieran con el lenguaje humano que lleva separando las palabras, por supuesto también las de los títulos de cualquier obra, con espacios desde hace milenios.
Aparte de eso, me ha sido muy útil la lección. Muchas gracias. :)
Saludos
Agradezco de antemano sus gentiles atenciones ayudas, atenciones y prontas respuestas.
A lo mejor alguna vez alguien de linux resuelve aquello de
"para que hacerlo simple si lo podemos hacer complicado"
mis archivos a renombrar son imagenes jpg, pero no tienen la extension literal. Y el script primero inserta un sufijo a todos los archivos incluyendo el script, y luego renombra todos los archivos con la extension jpg, incluyendo el script...no se si me hice entender..jajaja
espero me puedan ayudar...