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.extafilename.whatever.ext), - Compruebe si el prefijo o sufijo ya está presente y luego omita,
- Cree un alias que acepte argumentos como
addprefix whatever *.extoaddsufix 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
renameque 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 unperlexprcomo argumento. Este es elrenamecomando proporcionado por elperlpaquete 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 unaprefixcadena 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
renamepresente. 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