Existe-t-il un moyen de renommer tous les fichiers d'un répertoire en minuscules | majuscules?
Je recherche une commande oneliner .
J'ai adoré TotalCommander alt+f7
, maintenant j'ai besoin de cette fonctionnalité dans le terminal
Existe-t-il un moyen de renommer tous les fichiers d'un répertoire en minuscules | majuscules?
Je recherche une commande oneliner .
J'ai adoré TotalCommander alt+f7
, maintenant j'ai besoin de cette fonctionnalité dans le terminal
Réponses:
Pour chaque fichier a_file
du répertoire actuel, renommez-le a_file
en minuscules.
for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;
Pour les majuscules, inversez les arguments pour [:lower:] [:upper:]
tr
lien de référence de commande
Mise à jour
Pour encore plus de contrôle *
peut être remplacé par ls
.
Par exemple, dans un répertoire contenant 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg et 3.jpg afin de filtrer uniquement les fichiers * .jpg, ls
peuvent être utilisés:
for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;
Le code ci-dessus affectera à la a_file
variable tous les fichiers avec l'extension .jpg.
Mettre à jour l'-v
option ajoutée à la mv
commande selon les suggestions de sds .
Il existe un utilitaire plus élégant et général appelé prename
.
Écrit par Larry Wall, il est livré avec perl
donc il est très probablement déjà disponible sur votre système /usr/bin/prename
(si vous avez des alternatives de configuration, il peut également être disponible sous /usr/bin/rename
forme de lien symbolique via / etc / alternatives vers prename
)
En l'utilisant, vous pouvez renommer plusieurs fichiers en une seule commande en fournissant n'importe quelle expression perl (y compris, mais sans s'y limiter, la substitution s///
ou la translittération char tr///
):
Exemples:
# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG
# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*
# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*
# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}' *
Etc.
Une autre bonne chose à propos de prename est qu'il vous protège, dans le cas de renommer un fichier en un nom de fichier existant.
man prename
pour plus de détails.
find
find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
-name
mis votre modèle.-maxdepth 0
: Uniquement le répertoire courant.rename
-n, -nono
: Aucune action: affichez les noms des fichiers à renommer, mais ne les renommez pas.y/source/dest/
: Translittérer les caractères de l'espace de motif qui apparaissent en source au caractère correspondant dans dest.
mv
voir ce qui se fait; vous ne voudrez peut- être pas passer "-f" car cela pourrait encombrer les fichiers existants