Je dois renommer ce qui suit:
file_001_loremipsum.png
file_002_dolor.png
file_003_sit.png
file_004_amet.png
file_105_randomness.png
dans
upl_loremipsum.png
upl_dolor.png
upl_sit.png
upl_amet.png
upl_randomness.png
Comment puis-je y arriver avec une seule ligne de commande de terminal?
rename
regex
batch-rename
Unamata Sanatarai
la source
la source
Réponses:
La solution à l'exemple ci-dessus, en utilisant rename :
Usage:
De
man rename
:renommer PEUT prendre regex comme arguments.
Nous examinons le contenu entre les guillemets simples
'
. Vous pouvez placer les expressions rationnelles séparées par/
.Formule:
s/(1)/(2)/
où(1)
= modèle de recherche et(2)
= remplacer le modèle.Alors, familiarisez-vous avec regex et appréciez le changement de nom de fichier de lot basé sur un modèle!
la source
rename
est facile à installer avecbrew install rename
.--no-act
drapeau est à la--nono
place. Cette réponse pourrait également être un peu plus explicite:[files]
fait référence à un modèle initial de correspondance de fichiers dans le répertoire actuel que l’on souhaite potentiellement renommer (par exemple,*
correspond à tout, mais uniquement dans le répertoire actuel).rename
qui a un formatrename from to file
et ne supporte pas les expressions régulières. En fait, ma distribution Linux (Cent OS 7) a exactement cette version.si les fichiers sont dans plusieurs répertoires, utilisez renommer après une recherche comme:
le -n après renommer est à tester, supprimez-le pour continuer! -)
comme cela, vous associez rechercher et renommer le pouvoir.
Personnellement, je l’ai utilisé pour renommer l’en-tête des sources .h en .hpp
la source
-iname
,-type
et des-exec
drapeaux à manpages.ubuntu.com/manpages/bionic/man1/find.1.html#expression . (find --help
n'est pas particulièrement utile pour cette commande.) TL; DR:-iname
correspond à un modèle sans distinction de casse;-type f
correspond aux «fichiers normaux»; et-exec
exécute une expression jusqu'à ce qu'elle rencontre un caractère;
(point-virgule).Cela peut être fait avec un peu de magie de l'expansion des paramètres bash!
file_[0-9]*_*;
- Le premier motif est utilisé pour parcourir tous les fichiers qui commencent par 'file_anynumber_'${f#file_[0-9]*_}
- Le deuxième motiffile_[0-9]*_
est utilisé dans le développement de paramètres qui indique à bash de supprimer 'file_anynumber_' du début de la chaîne.Pour plus d'informations sur
Parameter expansion
:la source
[0-9]*
correspondra à un chiffre suivi de n'importe quelle chaîne. Il y a probablement une meilleure façon de faire correspondre les chiffres, mais je ne peux penser à rien de succinct.