Tengo muchos archivos en una carpeta y quiero agregarles un prefijo o un sufijo (no ambos ). Lo comprobé aquí y descubrí que puedo usar
for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;
para agregar un prefijo a todos los archivos que terminan en .jpg
(y si elimino el .jpg
, agregará el prefijo a todos los archivos en la carpeta actual).
Sin embargo, me gustaría poder
- Agregue un sufijo (es decir, cambie el nombre
filename.ext
afilename.whatever.ext
), - Compruebe si el prefijo o sufijo ya está presente y luego omita,
- Cree un alias que acepte argumentos como
addprefix whatever *.ext
oaddsufix whatever *.*
shell
shell-script
rename
Ese chico brasileño
fuente
fuente
if [ $f == $prefix* ]
y puede cambiar el sufijo uno conif [ $f == *$suffix$([ ! -z $extension ] && echo -n '.')$extension ]
alrededor de los comandos mv par en adduffix. Para (2) ya debería funcionar en archivos sin extensión, a menos que sea un programador horrible.Hay un comando Perl
rename
que debería hacer el truco. Sin embargorename
, tenga cuidado: hay varios comandos diferentes llamados , así que asegúrese de tener el script Perl que espera unperlexpr
como argumento. Este es elrename
comando proporcionado por elperl
paquete en Debian y derivados (Ubuntu, Mint, ...), pero no en otras distribuciones que pueden tener una utilidad diferente llamadarename
.Como puede ver, es idempotente : no volverá a agregar el prefijo cuando lo llame varias veces.
Funciona reemplazando el inicio (longitud cero) de las cadenas (
^
) o el inicio seguido de unaprefix
cadena opcional conprefix
.Dejaré encapsular esto en un script de shell o una función de shell como un ejercicio para ti :)
Sin embargo, Postfix es un poco más difícil, porque tienes que descubrir qué parte del nombre de archivo constituye la extensión ...
fuente
rename
presente. Y sé que los sufijos son un poco más difíciles, no se cubrieron en la pregunta vinculada, y soy un principiante en Linux, bash, script de shell, perl y expresiones regulares, por lo que "un poco más difícil" es bastante difícil para mí. ! :)Con
zsh
:~
es el operador global que significa excepto enzsh
.fuente
Ejemplo simple para cambiar el prefijo y la extensión de todas las imágenes en la carpeta actual.
Si desea verificar cómo afectaría sus datos antes de cambiarlos, reemplace el mv por echo
la salida para IMG_7993.JPG es EG_IMG_7993.jpg
fuente