GNU/Linux >> Tutoriels Linux >  >> Linux

Renommer les fichiers et répertoires de manière récursive sous ubuntu /bash

Une solution utilisant find :

Pour renommer les fichiers uniquement :

find /your/target/path/ -type f -exec rename 's/special/regular/' '{}' \;

Pour renommer répertoires uniquement :

find /your/target/path/ -type d -execdir rename 's/special/regular/' '{}' \+

Pour renommer les fichiers et les répertoires :

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

Si cela ne vous dérange pas d'installer un autre outil, vous pouvez utiliser rnm :

rnm -rs '/special/regular/g' -dp -1 *

Il passera par tous les répertoires/sous-répertoires (à cause de -dp -1 ) et remplacez spécial avec régulier en leurs noms.


La réponse de @speakr était l'indice pour moi.

Si vous utilisez -execdir pour transformer à la fois les fichiers et les répertoires, vous devrez également supprimer -type f à partir de l'exemple présenté. Pour l'épeler, utilisez :

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

Pensez également à ajouter g drapeau (global) à la regex si vous voulez remplacer tout occurrences de special avec regular dans un nom de fichier donné et pas seulement la première occurrence. Par exemple :

find /your/target/path/ -execdir rename 's/special/regular/g' '{}' \+

transformera special-special.jpg à regular-regular.jpg . Sans le drapeau global, vous vous retrouverez avec regular-special.jpg .

Pour info :GNU Rename n'est pas installé par défaut sur Mac OSX. Si vous utilisez le gestionnaire de paquets Homebrew, brew install rename va y remédier.


Essayez de faire ceci (nécessite bash --version>=4):

shopt -s globstar
rename -n 's/special/regular/' **

Supprimez le -n changer lorsque vos tests sont OK

Il existe d'autres outils portant le même nom qui peuvent ou non être capables de le faire, donc soyez prudent.

Si vous exécutez la commande suivante (GNU )

$ file "$(readlink -f "$(type -p rename)")"

et vous avez un résultat comme

.../rename: Perl script, ASCII text executable

et ne contenant pas :

ELF

alors cela semble être le bon outil =)

Sinon, pour en faire la valeur par défaut (généralement déjà le cas) sur Debian et dérivé comme Ubuntu :

$ sudo update-alternatives --set rename /path/to/rename

(remplace /path/to/rename au chemin de votre perl's rename commande.

Si vous n'avez pas cette commande, recherchez votre gestionnaire de paquets pour l'installer ou faites-le manuellement

Enfin, cet outil a été écrit à l'origine par Larry Wall, le père de Perl.


Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Comment rechercher et supprimer des répertoires et des fichiers vides sous Unix

  3. Comment rechercher et supprimer des répertoires et des fichiers vides sous Linux

  4. Rechercher et copier des fichiers

  5. Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

Rechercher la commande sous Linux (Rechercher des fichiers et des répertoires)

Comment renommer des fichiers et des répertoires sous Linux

3 façons de trouver des fichiers et des répertoires sous Linux

Comment renommer des fichiers et des répertoires dans Ubuntu 20.04

Trouvez facilement des fichiers et des répertoires sur Linux

Trouver plusieurs fichiers et les renommer sous Linux