Je sais comment je peux renommer des fichiers, etc., mais cela me pose problème.
J'ai seulement besoin de renommer test-this
dans une boucle 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 vous avez tous ces fichiers dans un dossier et que vous êtes sur Linux, vous pouvez utiliser:
rename 's/test-this/REPLACESTRING/g' *
Le résultat sera:
REPLACESTRING.ext
REPLACESTRING.volume001+02.ext
REPLACESTRING.volume002+04.ext
...
rename
peut prendre une commande comme premier argument. La commande ici se compose de quatre parties:
s
: flag pour remplacer une chaîne par une autre chaîne,test-this
: la chaîne que vous souhaitez remplacer,REPLACESTRING
: la chaîne par laquelle vous souhaitez remplacer la chaîne de recherche, etg
: un drapeau indiquant que toutes les correspondances de la chaîne de recherche doivent être remplacées, c'est-à-dire si le nom du fichier est test-this-abc-test-this.ext
_ le résultat sera REPLACESTRING-abc-REPLACESTRING.ext
.Faire référence à man sed
pour une description détaillée des drapeaux.
Utilisez rename
comme indiqué ci-dessous:
rename test-this foo test-this*
Cela remplacera test-this
avec foo
dans les noms de fichiers.
Si vous n'avez pas rename
, utilisez une boucle for
comme indiqué ci-dessous:
for i in test-this*
do
mv "$i" "${i/test-this/foo}"
done
Je suis sur OSX et mon bash ne vient pas avec rename
en tant que fonction intégrée. Je crée une fonction dans mon .bash_profile
qui prend le premier argument, qui est un motif dans le fichier qui ne doit correspondre qu’une seule fois, sans se soucier de ce qui vient après, et remplace par le texte de l’argument 2.
rename() {
for i in $1*
do
mv "$i" "${i/$1/$2}"
done
}
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
rename test-this hello-there
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