Solution 1 :
J'avais l'habitude d'écrire des scripts perl pour ce faire, jusqu'à ce que je découvre la commande rename.
Il accepte une regex perl pour renommer :
pour cela, j'ai juste tapé deux commandes :
rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *
rename 'y/A-Z/a-z/' *.log
Pour certaines distributions cependant, rename
n'a pas cette fonctionnalité (voir sa page de manuel), et vous devrez peut-être installer perl-rename
ou prename
.
Solution 2 :
mmv est un utilitaire Linux standard pour déplacer/renommer plusieurs fichiers. Il est disponible depuis les dépôts pour la plupart des distributions. Pour votre exemple ci-dessus, vous pourriez faire :
mmv '*-Log-*-*-*-NODATA.txt' '#l1.#4#3#2.log'
Pour plus d'informations, lisez cet article de Debaday ou la page de manuel.
Solution 3 :
Comme je n'ai pas de commande de renommage, je m'appuie sur ceci :
for myfile in /my/folder/*; do
target=$(echo $myfile|sed -e 's/foo/bar/g')
mv "$myfile" "$target"
done
Solution 4 :
rename
util n'est pas très "standard". Chaque distribution est livrée avec un rename
différent outil. Par exemple, ici sur Gentoo, rename
est de sys-apps/util-linux
package et ne prend pas en charge les regex.
Hamish Downer suggéré mmv
, il semble utile, spécialement pour une utilisation à l'intérieur des scripts.
D'autre part, pour le cas général, vous voudrez peut-être renameutils. Il a qmv
et qcp
commandes, qui ouvriront un éditeur de texte de votre choix (ma préférence :Vim) et vous permettront d'y modifier les noms de fichiers de destination. Après avoir enregistré et fermé l'éditeur, qmv
/qcp
fera tout le renommage.
Les deux mmv
et qmv
sont assez intelligents pour renommer les fichiers dans le bon ordre et également pour détecter les changements de nom circulaires, et créeront automatiquement un fichier temporaire si nécessaire.