mac os x terminal lot renommer

J’ai un dossier avec une série de fichiers nommés:

prefix_1234_567.png prefix_abcd_efg.png 

Je voudrais supprimer en lot un trait de soulignement et le contenu du milieu de sorte que la sortie serait

 prefix_567.png prefix_efg.png 

merci pertinent mais pas complètement explicatif: comment puis-je renommer par lots les fichiers en utilisant le terminal? Regex pour renommer par lots les fichiers dans le terminal OS X

Dans votre cas spécifique, vous pouvez utiliser la commande bash suivante ( bash est le shell par défaut sur macOS):

 for f in *.png; do echo mv "$f" "${f/_*_/_}"; done 

Note: S’il y a une chance que vos noms de fichiers commencent par - , place -- avant eux [1]:
mv -- "$f" "${f/_*_/_}"

Remarque: l’ echo est ajouté à mv pour effectuer un essai à sec. Supprimez-le pour effectuer un changement de nom réel.

Vous pouvez l’exécuter à partir de la ligne de commande ou l’utiliser dans un script.

  • "${f/_*_/_}" est une application de l’ extension du paramètre bash : le motif de correspondance (premier) de la sous-chaîne _*_ est remplacé par un littéral _ , coupant ainsi le jeton du nom.
  • Notez que _*_ est un modèle (une expression générique, également utilisée pour les globulations), et non une expression régulière (pour en savoir plus sur les patterns, exécutez man bash et recherchez Pattern Matching ).

Si vous rename fréquemment des fichiers par lot, envisagez d’installer un outil spécialisé tel que l’ utilitaire de rename basé sur Perl . Sur macOS, vous pouvez l’installer en utilisant le gestionnaire de paquets populaire Homebrew comme suit:

 brew install rename 

Voici l’équivalent de la commande du haut en utilisant rename :

 rename -n -e 's/_.*_/_/' *.png 

Encore une fois, cette commande effectue un essai à sec; supprime -n pour effectuer un changement de nom réel.

  • Semblable à la solution bash , s/.../.../ effectue la substitution de texte, mais contrairement à bash , les expressions régulières vraies sont utilisées.

[1] Le but de l’argument spécial -- qui est supporté par la plupart des utilitaires, est de signaler que les arguments suivants doivent être traités comme des opérandes (valeurs), même s’ils ressemblent à des options en commençant par - , comme le note Jacob C. .

Pour renommer des fichiers, vous pouvez utiliser l’utilitaire de rename :

brew install rename

Par exemple, pour modifier une chaîne de recherche dans tous les noms de fichiers du répertoire en cours:

 rename -nvs searchword replaceword * 

Supprimez le paramètre ‘n’ pour appliquer les modifications.

Plus d’infos: man rename

Vous pouvez utiliser sed:

 ls * | sed -e 'p;s@_.*_@_@g' | xargs -n2 mv 

résultat:

 prefix_567.png prefix_efg.png 

* faire une course sèche d’abord, remplacer mv à la fin par echo

J’avais un lot de fichiers qui ressemblaient à ceci: be90-01.png et il fallait changer le tiret en trait de soulignement. J’ai utilisé ceci, ce qui a bien fonctionné:

 for f in *; do mv "$f" "`echo $f | tr '-' '_'`"; done 

vous pouvez installer la commande rename en utilisant l’ brew . Il suffit de faire le programme d’ brew install rename et le brew install rename .

Utiliser mmv

 mmv '*_*_*' '#1_#3' *.png 

essaye ça

 for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; done 

Voici une autre façon:

 for file in Name*.png; do mv "$file" "01_$file"; done