J'ai de nombreux fichiers dans un dossier et je veux leur ajouter soit un préfixe, soit un suffixe (pas les deux ). J'ai vérifié ici et découvert que je peux utiliser
for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;
pour ajouter un préfixe à tous les fichiers se terminant par .jpg
(et si je supprime le .jpg
, il ajoutera le préfixe à tous les fichiers du dossier actuel).
Cependant, j'aimerais pouvoir
- Ajouter un sufix (qui est, renommer
filename.ext
àfilename.whatever.ext
), - Vérifiez si le préfixe ou le suffixe est déjà présent, puis ignorez,
- Créez un alias qui accepte des arguments tels que
addprefix whatever *.ext
ouaddsufix whatever *.*
shell
shell-script
rename
Ce gars brésilien
la source
la source
if [ $f == $prefix* ]
et vous pouvez changer le suffixe avecif [ $f == *$suffix$([ ! -z $extension ] && echo -n '.')$extension ]
les quelques commandes mv dans l'adduffix. Pour (2), cela devrait déjà fonctionner sur des fichiers sans extension, sauf si je suis un horrible programmeur.Il y a une commande Perl
rename
qui devrait faire l'affaire. Attention cependant: il existe plusieurs commandes différentesrename
, alors assurez-vous d'avoir le script Perl qui attend aperlexpr
comme argument. C'est larename
commande fournie par leperl
paquet sur Debian et ses dérivés (Ubuntu, Mint,…), mais pas sur d'autres distributions qui peuvent avoir un utilitaire différent appelérename
.Comme vous pouvez le voir, il est idempotent - il n'ajoutera pas de nouveau le préfixe lorsque vous l'appelez plusieurs fois.
Cela fonctionne en remplaçant le début (de longueur nulle) des chaînes (
^
) ou le début suivi d'uneprefix
chaîne facultative avecprefix
.Je vais laisser encapsuler cela dans un script shell ou une fonction shell comme un exercice pour vous :)
Postfix est un peu plus difficile, car vous devez déterminer quelle partie du nom de fichier constitue l'extension ...
la source
rename
. Et je sais que les suffixes sont un peu plus difficiles, ce n'était pas couvert dans la question liée, et je suis un débutant sur linux, bash, script shell, perl et les expressions régulières, donc "un peu plus dur" est assez difficile pour moi ! :)Avec
zsh
:~
est l'opérateur de globbing qui signifie sauf danszsh
.la source
Exemple simple pour changer le préfixe et l'extension de toutes les images du dossier actuel.
Si vous voulez vérifier comment cela affecterait vos données avant de les changer, remplacez le mv par echo
la sortie pour IMG_7993.JPG est EG_IMG_7993.jpg
la source