Comment renommer tous les fichiers d'un répertoire, de manière récursive, en changeant une extension de fichier en une autre, pour des milliers de fichiers dans des milliers de sous-dossiers? Je vois beaucoup de commandes qui font presque ce que je veux, mais pas tout à fait.
find . -name "*.andnav" -exec rename .andnav .tile {} \;
syntax error at (eval 1) line 1, near "."
...
rename -nv 's/\.andnav$/\.tile/i' *.andnav
0.png.andnav renamed as 0.png.tile
linux
command-line
file-management
rename
endolith
la source
la source
rename
ou Red Hatrename
?Réponses:
Deviner
bien sûr, supprimez le -v lorsque vous le faites, ou cela perdra du temps à afficher tous les fichiers
la source
Quelque chose comme:
la source
Avec zsh:
Supprimez le
-n
pour effectuer le changement de nom.la source
J'ai trouvé que cette méthode est de plus en plus facile à lire:
Au moins sur les dérivations Ubuntu, renommer prend une liste de fichiers de STDIN si aucun n'est sur la ligne de commande. Et cela peut être testé facilement avec:
jusqu'à ce que vous compreniez bien.
la source
Renommez les fichiers et les répertoires avec
find -execdir | rename
Si vous allez renommer à la fois des fichiers et des répertoires non pas simplement avec un suffixe, alors c'est un bon modèle:
Contrairement à, l'
-execdir
option génial fait uncd
dans le répertoire avant d'exécuter larename
commande-exec
.-depth
assurez-vous que le changement de nom se produit d'abord sur les enfants, puis sur les parents, pour éviter les problèmes potentiels avec les répertoires parent manquants.-execdir
est requis car le changement de nom ne fonctionne pas bien avec les chemins d'entrée autres que les noms de base, par exemple ce qui suit échoue:Le
PATH
piratage est nécessaire car il-execdir
a un inconvénient très ennuyeux: ilfind
est extrêmement avisé et refuse de faire quoi que ce soit avec-execdir
si vous avez des chemins relatifs dans votrePATH
variable d'environnement, par exemple./node_modules/.bin
, en échouant avec:Voir aussi: /ubuntu/621132/why-using-the-execdir-action-is-insecure-for-directory-which-is-in-the-path/1109378#1109378
-execdir
est une extension GNU find pour POSIX .rename
est basé sur Perl et provient durename
package. Testé dans Ubuntu 18.10.Renommer la solution de contournement
Si vos chemins d'entrée ne proviennent pas
find
, ou si vous en avez assez de la gêne relative du chemin, nous pouvons utiliser une anticipation Perl pour renommer en toute sécurité les répertoires comme dans:Je ne l' ai pas trouvé un analogue pratique pour
-execdir
avecxargs
: xargs: répertoire de travail modification chemin du fichier avant d' exécuter?Il
sort -r
est nécessaire de s'assurer que les fichiers viennent après leurs répertoires respectifs, car les chemins plus longs viennent après les plus courts avec le même préfixe.la source