J'avais un groupe de fichiers que je voudrais renommer régulièrement, les fichiers sont nommés des choses comme
"System-Log-01-01-2009-NODATA.txt"
"Something-Log-01-01-2009-NODATA.txt"
Et je les voulais en minuscules, aaaammjj, extension .log
"system.20090101.log"
"something.20090101.log"
mmv
mais finalement grâce àrename
je peux utiliser le pouvoir des regexperl-rename
.Comme je n'ai pas de commande renommer, je m'appuie sur ceci:
la source
mmv est un utilitaire linux standard pour déplacer / renommer plusieurs fichiers. Il est disponible à partir des dépôts pour la plupart des distributions. Pour votre exemple ci-dessus, vous pouvez faire:
Pour plus d'informations, lisez cet article debaday ou la page de manuel .
la source
rename
l'utilité n'est pas très "standard". Chaque distribution est livrée avec unrename
outil différent . Par exemple, ici sur Gentoo,rename
vient dusys-apps/util-linux
package et ne prend pas en charge l'expression régulière.Hamish Downer a suggéré que
mmv
cela semble utile, spécialement pour une utilisation dans des scripts.En revanche, pour le cas général, vous voudrez peut-être renameutils . Il a
qmv
et desqcp
commandes, qui ouvriront un éditeur de texte de votre choix (ma préférence: Vim) et vous permettront d'y éditer les noms de fichiers de destination. Après avoir enregistré et fermé l'éditeur,qmv
/qcp
fera tout le changement de nom.Les deux
mmv
etqmv
sont assez intelligents pour renommer les fichiers dans l' ordre correct et aussi pour détecter les renommages circulaires, et sera automatiquement créer un fichier temporaire si nécessaire.la source
sys-apps/rename
package, qui vousrenamexm
permet de renommer les expressions régulières ainsi que les majuscules / minuscules de masse et d'autres choses intéressantes.Être juste:
donne cette sortie:
Mais:
rename -n 's/(\w+)-\w+-(\d{2})-(\d{2})-(\d{4})-NODATA\.txt$/$1.$4$3$2\.log/' *.txt && rename 'y/A-Z/a-z/' System.20090101.log
donne la bonne sortie:
remplacement du commutateur {-n} par {-v}
la source
J'ai créé un petit script bash pour ce faire:
la source
ls
sorties n'est pas la meilleure idée. Une recherche aléatoire a tiré cette longue lecture sur Unix. SE pour votre amusement. | De plus, votre réponse correspondrait mieux à la question avec untr '[:upper:]' '[:lower:]'