LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

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


Pin It

Comentarios  

0 # alex 26-02-2014 17:32
Buenas,
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
Responder | Responder con una citación | Citar
+4 # Expresiones 27-02-2014 12:51
Basta que con escribas...

for FILE in *.mp4 ; do NEWFILE=`echo $FILE | sed -e 's/.MP4$/.mp4/' -e 's/[.]/_VOSE_20 ./g'` ; mv "$FILE" $NEWFILE ; done
Responder | Responder con una citación | Citar
0 # alex 04-03-2014 18:53
:-) :lol:
Responder | Responder con una citación | Citar
0 # alex 05-03-2014 09:59
La operación me devuelve esto:

mv: target `.mp4' is not a directory
mv: target `.mp4' is not a directory

:-? :sad: :oops:
Responder | Responder con una citación | Citar
+1 # Carlos 06-03-2014 07:39
Alex, no hay ninguna satisfacción mayor que la del propio trabajo bien hecho.

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.

:-)
Responder | Responder con una citación | Citar
-1 # Victor 06-03-2014 16:37
Alex:

"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...
Responder | Responder con una citación | Citar
+3 # Runner 06-03-2014 16:49
Cogiendo el ejemplo anterior...

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

==================================
Responder | Responder con una citación | Citar
+2 # alex 11-03-2014 13:32
:-*
Muchas gracias a todos.
Siento las molestias :cry: 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!
Responder | Responder con una citación | Citar
0 # benjamin galicia 01-10-2014 03:38
super la informacion y la explicacion. muy util y muchas gracias. a favoritos. saludos
Responder | Responder con una citación | Citar
0 # Carlos Andres 27-11-2014 17:01
Buen día,

Muchas gracias por la guía, una consulta, como sería para quitar espacios en directorios???

Gracias
Responder | Responder con una citación | Citar
0 # Javier Orovengua 27-11-2014 21:27
Cito a Carlos Andres:
Buen día,

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...
Responder | Responder con una citación | Citar
0 # Fernando 01-12-2014 20:17
:D Buenísimo, bien explicado y de mucha ayuda, mil gracias
Responder | Responder con una citación | Citar
0 # Daniel 16-01-2015 21:05
Excelente explicación, gracias por la aportación.
Responder | Responder con una citación | Citar
0 # jujenio 15-04-2015 15:42
Muy buena info!..pero no soy capaz d agregar como prefijo a una lista d archivos .mp4 numerandolos de 1 a x... intente el ultimo comando: $ NUM=0 ; for FILE in * ; do NUM=`expr $NUM + 1` ; mv $FILE ${FILE}_$NUM ; done .. asi tal cual esta y me muesta el error.. "is not a directory".. gracias!!
Responder | Responder con una citación | Citar
0 # indalecio 02-06-2017 13:39
Debes hacerlo desde la consola (shell) de Linux, y si cambias "mv" por "echo", para probar si funciona, SI, funciona.

NUM=0 ; for FILE in * ; do NUM=`expr $NUM + 1` ; echo $FILE ${FILE}_$NUM ; done
Responder | Responder con una citación | Citar
0 # dani8681 01-06-2017 22:18
Buenas Tardes. Muy buen aporte...
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...
Responder | Responder con una citación | Citar
0 # indalecio 02-06-2017 13:50
Prueba que VA A FUNCIONAR así:

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í.
Responder | Responder con una citación | Citar
0 # Luiss 10-02-2018 19:20
"¿Quien tubo las estúpida idea de poner espacios en los nombres de archivo?"

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. :)
Responder | Responder con una citación | Citar
0 # Jesus 09-04-2018 22:05
Buenas tardes me gustaría que me ayudaran con este temita que tengo... Tengo una carpeta de respaldo donde tengo solo archivos bCOL00916014.da t.old y me gustaría un comando para quitarle el (.old) a todos de una vez
Responder | Responder con una citación | Citar
0 # rambert 23-05-2018 13:35
Necesito saber como cambiar la letra que va despues de un guion bajo por mayuscula en ficheros

Saludos
Responder | Responder con una citación | Citar
0 # RADEL 21-06-2018 22:38
Saludos, por medio de la presente le solicito encarecidamente que tengan la amabilidad de ayudarme en como renombar o cambiar de nombre a directorios y archivos con carácteres raros como tildación, apóstrofes, parentesis, llaves, corchetes, ampersand, grados centigrados, farenhait, y otros ejemplo: "Maxx - No More (I Can't Stand It) (Airplay Mix).avi" "Gúitarrero.avi " "Canción 20 & Canción 50 (Techno 90's).mp4".


Agradezco de antemano sus gentiles atenciones ayudas, atenciones y prontas respuestas.
Responder | Responder con una citación | Citar
0 # emerson 18-10-2018 04:04
pensar que esto se hace con windows y rename con dos clicks....
A lo mejor alguna vez alguien de linux resuelve aquello de
"para que hacerlo simple si lo podemos hacer complicado"
Responder | Responder con una citación | Citar
0 # Javier 18-10-2018 09:11
Dime Emerson, como puedo hacer en Windows, quitar de una sola pasada, los espacios a los nombres y convertir las mayúsculas a minúsculas? (Para no hacerlo demasiado complejo) en un directorio con 18.000 ficheros.
Responder | Responder con una citación | Citar
0 # NICOLAS IBARRA 02-11-2018 22:39
hola, muy bueno tu articulo, pero necesito un favor, cree un script, pero lo ejecuto dentro del mismo directorio de los archivo a renombrar, incluyendo el nombre del script, como hago para que no se renombre el script.
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...
Responder | Responder con una citación | Citar
0 # Javier 04-11-2018 17:01
No veo problema en que se te renombre el script, si no quieres que se te renombre, incluye una sentencia if entre el do ... done, o bien. En vez de hacer un script, ejecuta todas las sentencias en la linea de comandos, poniendas una detrás de las otras separadas por " ; "
Responder | Responder con una citación | Citar

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías