GNU/Linux >> Tutoriels Linux >  >> Linux

Raccourci Shell/Bash pour renommer en bloc des fichiers dans un dossier

Il y a prename , qui vous permet d'utiliser REGEX :

prename 's/^.*-doc-(.*\.txt)$/doc-$1/'  *.txt

Utilisez l'option -n simuler :

prename -n 's/^.*-doc-(.*\.txt)$/doc-$1/'  *.txt

Remarque : Il s'agit de l'expédition sous la forme rename dans de nombreuses distributions Linux, mais pas dans toutes -- j'utilise donc le nom canonique de l'utilitaire fourni avec Perl.


Je suggérerais quelque chose comme ceci :

for i in *-doc-*.txt; do mv "$i" "${i/*-doc-/doc-}"; done

${i/*-doc-/doc-} remplace la première occurrence de *-doc- avec doc- .

Si vous devez faire plus d'un remplacement (voir commentaire numéro 1), vous devez utiliser le ${var//Pattern/Replacement} une variante. Si vous devez remplacer le début du nom, vous devez utiliser ${var/#Pattern/Replacement} , si vous devez remplacer la fin (c'est-à-dire l'extension) vous devez utiliser le ${var/%Pattern/Replacement} formulaire.

Voir Extension des paramètres du shell pour plus de détails. Cette extension est spécifique à bash.


Si vous avez rename puis, rename 's/^.*-doc-/doc-/' *.txt devrait faire l'affaire.


Si vous souhaitez revenir en arrière dans les sous-répertoires, il existe également :

find . -maxdepth N -type f -name "$pattern" | sed -e 'p' -E -e "s/$str1/$str2/g" | xargs -n2 mv

Sur les systèmes qui prennent automatiquement en charge les expressions régulières étendues, vous pouvez laisser de côté le -E .

Avantages :

  • se récurse dans les sous-répertoires
  • vous pouvez contrôler la profondeur maximale de la récursivité
  • vous pouvez renommer des fichiers et/ou des répertoires (-type f|d)

Inconvénients :

  • expressions régulières légèrement plus compliquées, car vous devez supprimer le chemin pour accéder au nom de fichier

(réponse modifiée à partir d'ici)


Linux
  1. Script pour surveiller le dossier pour les nouveaux fichiers ?

  2. Extension du chemin d'accès Bash/shell pour Mkdir, Touch, etc. ?

  3. Espaces pour les variables dans le script bash ?

  4. 12 exemples de boucle Bash For pour votre script de shell Linux

  5. Comment le shell BASH charge ses fichiers de configuration sous Linux

Shell Scripting pour les débutants - Comment écrire des scripts Bash sous Linux

Avez-vous besoin d'une coque pour Scp ?

Comment créer un environnement Shell propre pour une utilisation temporaire ?

Mode IDE / Emacs pour les scripts Shell dans Bash/Sh, etc.

Comment substituer des variables shell dans des fichiers texte complexes

Comment puis-je trouver de l'aide pour la commande de point `.` dans * nix ?