Respuestas:
Simplemente use bash, no es necesario llamar a comandos externos.
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
No añada #!/bin/sh
Para aquellos que necesitan esa frase:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh
? Intenté trabajar con / sin esta declaración.
#!/bin/bash
. Dicho esto, bash es normalmente el shell predeterminado en muchas computadoras, por lo que no encontrará muchas diferencias: D Puede encontrar más información aquí
Probar rename
comando:
rename 's/_h.png/_half.png/' *.png
Actualizar:
ejemplo de uso:
crear algo de contenido
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
solución de prueba:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls
? ¿Qué es lo rename ...
que intentas?
rename
No es una herramienta estándar de Unix.
brew install rename
's//'
- hice referencia al hombre y había una sinopsis simple:, rename [options] expression replacement file...
en CentOS 7, versión:rename from util-linux 2.23.2
.
coincide con CUALQUIER carácter, no solo con un punto: para el punto literal, use \.
en su lugar
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnew
con echo $fnew
la segunda línea para asegurarme de que la salida se vea sana.
¿Estás buscando una solución de bash puro? Hay muchos enfoques, pero aquí hay uno.
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
Esto supone que los únicos archivos en el directorio actual que terminan en _h.png
son los que desea renombrar.
Mucho más específicamente
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
Presumiendo que esos dos ejemplos son los únicos. archivos.
Para el caso general, el cambio de nombre de archivo se ha cubierto anteriormente .
Use la rename
utilidad escrita en perl. Sin embargo, es posible que no esté disponible de forma predeterminada ...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
Tuve una pregunta similar: en el manual, describe cambiar el nombre como
rename [option] expression replacement file
para que puedas usarlo de esta manera
rename _h _half *.png
En el código: '_h' es la expresión que estás buscando. '_half' es el patrón con el que desea reemplazar. '* .png' es el rango de archivos que está buscando para sus posibles archivos de destino.
Espero que esto pueda ayudar c:
Otro enfoque puede ser manualmente usando la opción de cambio de nombre de lote
Haga clic derecho en el archivo -> Comandos personalizados de archivo -> Cambiar nombre de lote y puede reemplazar h. con la mitad
Esto funcionará para la interfaz gráfica de usuario basada en Linux usando WinSCP, etc.
Usa la rename
utilidad:
rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' *
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png
Aunque el conjunto de respuestas está completo, necesito agregar otro que falta.
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done