Como seguimiento a mi pregunta anterior , si tengo varios archivos del formulario
sw.ras.001
sw.ras.002
sw.ras.003
…
¿Qué comando puedo usar para eliminar el ras.
en medio de todos los archivos?
\.
en los patrones.
Como seguimiento a mi pregunta anterior , si tengo varios archivos del formulario
sw.ras.001
sw.ras.002
sw.ras.003
…
¿Qué comando puedo usar para eliminar el ras.
en medio de todos los archivos?
\.
en los patrones.
Respuestas:
Puede hacer esto con una modificación bastante pequeña de cualquiera de las respuestas de la última pregunta:
rename s/ras\.// sw.ras.*
o
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
Explicación:
rename
es un perl
script que toma una perl
expresión regular y una lista de archivos, aplica la expresión regular al nombre de cada archivo a su vez y cambia el nombre de cada archivo al resultado de aplicar la expresión regular. En nuestro caso, ras
coincide literalmente y \.
coincide con un literal .
(ya que .
solo indica cualquier carácter que no sea una nueva línea), y lo reemplaza con nada.
El for
bucle toma todos los archivos que comienzan con sw.ras.
(shell glob estándar) y los repite. ${var/search/replace}
búsquedas $var
para search
y reemplaza la primera ocurrencia con replace
, por lo que ${file/ras./}
regresa $file
con el primer ras.
eliminado. El comando cambia el nombre del archivo al mismo nombre menos ras.
. Tenga en cuenta que con esta búsqueda y reemplazo, .
se toma literalmente, no como un carácter especial.
Otra opción es usar mmv (Mass MoVe y renombrar):
mmv '*ras.*' '#1#2'
No olvides usar las comillas simples alrededor de tus patrones, de lo contrario las estrellas se expandirán a nivel de caparazón.
La utilidad no siempre está disponible, pero si no lo está, puede instalarla con:
sudo apt-get install mmv
Vea la página de aquí .
En cualquier shell POSIX-compatible ( bash
, dash
, ksh
, etc):
for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
mv "${file}" "${file/ras\./}"
done
O con rename
:
rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
Recientemente tuve que hacer un cambio de nombre masivo de una serie de archivos donde tuve que reemplazar la última aparición de un personaje donde el personaje ocurrió varias veces en los nombres de archivo. En este caso particular, tuve que reemplazar el último guión -
con un guión bajo _
, convirtiendo esto:
some-long-file-name.ext
dentro de esto:
some-long-file_name.ext
Tomó algo de tiempo, pero finalmente lo logró:
for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done
Aquí:
${i%-*}
coincide con el comienzo del nombre del archivo hasta la última aparición del guión -
${file##*-}
coincide con el resto del nombre de archivo después de la última aparición del guión -
ras
, es decir, terminar consw..001
, o elras.
, dejandosw.001
?