Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/11/2016, à 13:50

csm

Remplacer : dans des fichiers et dossier en masse et récursivement

Bonjour,

j'ai des milliers de fichiers et dossiers qui ont été importés depuis un vieux mac. Malheureusement, de nombreux fichiers et dossiers contiennent le caractère : qui me pose problème car on travaille dans une environnement mixte windows / ubuntu / mac os.

Je cherche donc une commande sûre pour remplacer le caractère : dans tous les noms de fichier et de dossier par un autre caractère (par exemple _ ) et ce récursivement (il y a des milliers de dossiers et des dizaines de milliers de fichiers, avec parfois une profondeur de 10-15 dossiers).

Pourriez-vous m'aider ? Merci !

Hors ligne

#2 Le 03/11/2016, à 14:26

Shanx

Re : Remplacer : dans des fichiers et dossier en masse et récursivement

Salut,
Commande pour tester :

find /search/path -depth -name '*:*'  -execdir bash -c 'echo mv "$1" "${1//:/_}"' _ {} \;

Si le résultat te convient, tu peux retirer le "echo" pour lancer la commande. wink


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#3 Le 03/11/2016, à 14:37

pingouinux

Re : Remplacer : dans des fichiers et dossier en masse et récursivement

Bonjour,
J'ai été devancé, mais je propose ceci

find repertoire_de_depart -depth -execdir rename 's/:/_/g' {} \;

À tester sur un petit répertoire. Si le nouveau nom existe déjà, on ne modifie pas l'ancien.

Dernière modification par pingouinux (Le 03/11/2016, à 14:37)

Hors ligne

#4 Le 03/11/2016, à 15:04

gigiair

Re : Remplacer : dans des fichiers et dossier en masse et récursivement

Je suis pour la soluntion #3, on peut ajouter l'option -n à la commande rename pour afficher les remplacements qui seront effectués sans procéder au remplacement. puis si l'essai est concluant un deuxième passage sans cette option.

find repertoire_de_depart -depth -execdir rename -n 's/:/_/g' {} \;

--
JJR.

Hors ligne

#5 Le 03/11/2016, à 15:13

Shanx

Re : Remplacer : dans des fichiers et dossier en masse et récursivement

Attention, j'avais lu que rename peut avoir des problèmes si le motif se trouve dans le nom du fichier et dans celui du répertoire parent.


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#6 Le 03/11/2016, à 17:28

pingouinux

Re : Remplacer : dans des fichiers et dossier en masse et récursivement

Shanx a écrit :

Attention, j'avais lu que rename peut avoir des problèmes si le motif se trouve dans le nom du fichier et dans celui du répertoire parent.

Avec -depth, on renomme d'abord les fichiers et répertoires les plus profonds dans l'arborescence.
Avec -execdir, {} ne contient que le nom du basename.

Hors ligne

#7 Le 04/11/2016, à 11:30

csm

Re : Remplacer : dans des fichiers et dossier en masse et récursivement

Merci, finalement j'ai utilisé la commande Shanx et tout a l'air de s'être bien passé. J'ai gardé une trace de toutes les modifications effectuées au cas où...

Merci à tous

Hors ligne

#8 Le 04/11/2016, à 19:00

Hizoka

Re : Remplacer : dans des fichiers et dossier en masse et récursivement

si c'est ok, ajoute un petit [resolu] dans le titre du topic smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne