bash - varios - renombrar archivos recursivamente linux
Cambie el nombre de varios archivos, pero solo cambie el nombre de una parte del nombre del archivo en Bash (3)
Función
Estoy en OSX y mi bash no viene con el rename
como una función incorporada. Creo una función en mi .bash_profile
que toma el primer argumento, que es un patrón en el archivo que solo debe coincidir una vez, y no le importa lo que viene después, y reemplaza con el texto del argumento 2.
rename() {
for i in $1*
do
mv "$i" "${i/$1/$2}"
done
}
Archivos de entrada
test-this.ext
test-this.volume001+02.ext
test-this.volume002+04.ext
test-this.volume003+08.ext
test-this.volume004+16.ext
test-this.volume005+32.ext
test-this.volume006+64.ext
test-this.volume007+78.ext
Mando
rename test-this hello-there
Salida
hello-there.ext
hello-there.volume001+02.ext
hello-there.volume002+04.ext
hello-there.volume003+08.ext
hello-there.volume004+16.ext
hello-there.volume005+32.ext
hello-there.volume006+64.ext
hello-there.volume007+78.ext
Sé cómo puedo cambiar el nombre de los archivos y demás, pero estoy teniendo problemas con esto.
Solo necesito cambiar el nombre test-this
en un bucle for.
test-this.ext
test-this.volume001+02.ext
test-this.volume002+04.ext
test-this.volume003+08.ext
test-this.volume004+16.ext
test-this.volume005+32.ext
test-this.volume006+64.ext
test-this.volume007+78.ext
Si tiene todos estos archivos en una carpeta y está en Linux, puede usar:
rename ''s/test-this/REPLACESTRING/g'' *
El resultado será:
REPLACESTRING.ext
REPLACESTRING.volume001+02.ext
REPLACESTRING.volume002+04.ext
...
rename
puede tomar un comando como primer argumento. El comando aquí consta de cuatro partes:
-
s
: bandera para sustituir una cadena con otra cadena, -
test-this
: la cadena que desea reemplazar, -
REPLACESTRING
: la cadena con la que desea reemplazar la cadena de búsqueda, y -
g
: un indicador que indica que todas las coincidencias de la cadena de búsqueda se reemplazarán, es decir, si el nombre del archivo estest-this-abc-test-this.ext
seráREPLACESTRING-abc-REPLACESTRING.ext
.
Consulte man sed
para una descripción detallada de las banderas.
Use el rename
como se muestra a continuación:
rename test-this foo test-this*
Esto reemplazará a test-this
con foo
en los nombres de archivo.
Si no tiene un nuevo rename
use un ciclo for
como se muestra a continuación:
for i in test-this*
do
mv "$i" "${i/test-this/foo}"
done