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 10/11/2022, à 21:34

iznobe

[ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Bonjour , je suppose que c' est possible ,mais je n' ai pas trouver directement avec find .

j ' ai une liste de fichiers dans un dossier , sur lequel je voudrais lister que ceux dont le nom ne comporte pas un caractere en particulier .

je connais "grep -v " mais ca ne fonctionne pas sur un dossier , du coup je m' en remet a vous pour d' eventuelles idées .

Bon , ba finalement , je pense avoir trouvé , pour liste tous les fichiers ne comportant pas de " ( " dans leur nom :

find type=file /chemin/dossier | grep -v "(" 

Merci .

Dernière modification par iznobe (Le 11/11/2022, à 19:20)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#2 Le 10/11/2022, à 21:38

iznobe

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Finalement , dans la poursuite de ma quete du jour , j ' aimerais renommer les fichiers ne comportant pas de ' ( ' dans leur nom , a condition qu ' il comporte une suite de 4 caracteres numeriques , et de les encadrer avec des parentheses du genre :
fichier 1234.pdf
fichier (1234).pdf

ca m' enleverais une peine du pied car j ' ai beaucoup de fichiers a traiter ... des idées ?


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#3 Le 10/11/2022, à 22:06

pingouinux

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Bonsoir,
Pour la question en #1, je ferais ceci :

find -type f -regex '[^(]+'

Et pour la question en #2 :

rename -n 's/^(\d{4})\./($1)./' *

Édité :
Pour descendre dans l'arborescence :

shopt -s globstar
rename -n 's/^(\d{4})\./($1)./' **/*

Dernière modification par pingouinux (Le 10/11/2022, à 22:15)

Hors ligne

#4 Le 10/11/2022, à 22:06

Watael

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

find a une option -regex; grep est inutile. smile
pour la regex...

find "$dossier" -type f \( -regex '.*[0-9]{4}.*' -a ! -regex '.*(.*' \)

?

si je me souviens bien, une des versions de rename (est-elle encore dispo sur Ubuntu ?) a une option de récursivité, et gère des regex "complexes".

Dernière modification par Watael (Le 10/11/2022, à 22:07)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 10/11/2022, à 22:11

Hizoka

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Salut,

je n'ai surement pas pensé à tous les cas mais voici une proposition :

ls
'fichier 14656.txt'  'fichier (2225).txt'  'fichier 2666.txt'  'fichier 266.txt'  'fichier (3000).txt'  'fichier 4656 fff 22.txt'  'fichier 4656.txt'  'fichier 46.txt'

find . -iregex "[^(]*[^0-9(][0-9][0-9][0-9][0-9][^0-9(][^(]*" -exec rename -n "s/(.*)([0-9][0-9][0-9][0-9])(.*)/\$1(\$2)\$3/" "{}" \+
rename(./fichier 4656 fff 22.txt, ./fichier (4656) fff 22.txt)
rename(./fichier 2666.txt, ./fichier (2666).txt)
rename(./fichier 4656.txt, ./fichier (4656).txt)

Restriction :
le fichier ne doit pas commencer avec les nombres ni finirent avec (sans extension).
la commande rename n'est pas installée par défaut

sudo apt install rename

Si ça te va, retire le -n de la commande rename.

Dernière modification par Hizoka (Le 10/11/2022, à 22:14)


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

Hors ligne

#6 Le 10/11/2022, à 22:42

Watael

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

-iregex rend la regex insensible à la casse; ici, ce n'est pas utile, puisqu'elle n'indique que des chiffres et une ponctuation.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 11/11/2022, à 01:27

MicP

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Bonjour

J'ai réussi à le faire sans utiliser les commandes externes find et rename <=> en n'utilisant que les fonctions internes du shell bash … ->
(j'ai ajouté ce qui suit plus tard) ->… pour sélectionner les fichiers à envoyer à la commande externe mv
EDIT : La commande mv est une commande externe

michel@deb115:~$ ls -lR $HOME/tstquatrechiffres      # Je liste les fichiers que j'ai créé pour ce test
/home/michel/tstquatrechiffres:
total 4
-rw-r--r-- 1 michel michel    0 10 nov.  22:31 'AAfich123ab(1234)xx'
-rw-r--r-- 1 michel michel    0 10 nov.  22:31 'BBfich123ab1234(xx'
-rw-r--r-- 1 michel michel    0 10 nov.  22:31  CCfich123ab1234xx
-rw-r--r-- 1 michel michel    0 10 nov.  22:51 'DDfic h5678ab 134xx'
-rw-r--r-- 1 michel michel    0 10 nov.  22:49 'EEfic(h5678ab134xx'
-rw-r--r-- 1 michel michel    0 10 nov.  22:32  FFfich5678ab134xx
-rw-r--r-- 1 michel michel    0 11 nov.  00:07 'fichier 14656.txt'
-rw-r--r-- 1 michel michel    0 11 nov.  00:07 'fichier (2225).txt'
-rw-r--r-- 1 michel michel    0 11 nov.  00:07 'fichier 2666.txt'
-rw-r--r-- 1 michel michel    0 11 nov.  00:07 'fichier 266.txt'
-rw-r--r-- 1 michel michel    0 11 nov.  00:07 'fichier (3000).txt'
-rw-r--r-- 1 michel michel    0 11 nov.  00:07 'fichier 4656 fff 22.txt'
-rw-r--r-- 1 michel michel    0 11 nov.  00:07 'fichier 4656.txt'
-rw-r--r-- 1 michel michel    0 11 nov.  00:07 'fichier 46.txt'
drwxr-xr-x 2 michel michel 4096 10 nov.  23:26  sous-rep

/home/michel/tstquatrechiffres/sous-rep:
total 0
-rw-r--r-- 1 michel michel 0 10 nov.  23:25 'GGafg 1234xyz'
-rw-r--r-- 1 michel michel 0 10 nov.  23:26  HHkjhkjh5678gfd
-rw-r--r-- 1 michel michel 0 10 nov.  23:26 'IItrerte(5678)fds hfd'
michel@deb115:~$ 

michel@deb115:~$ shopt globstar nullglob dotglob       # par défaut ces options du shell 'bash' sont désactivées
globstar       	off
nullglob       	off
dotglob        	off
michel@deb115:~$ 
michel@deb115:~$ shopt -s globstar nullglob dotglob    # je les active pour que la recherche se fasse de façon récursive
michel@deb115:~$ shopt globstar nullglob dotglob       # maintenant, elles sont activées
globstar       	on
nullglob       	on
dotglob        	on
michel@deb115:~$ 

michel@deb115:~$ maReg='[^([:digit:]]([[:digit:]]{4})[^)[:digit:]]'   # La regex qui va être utilisée
michel@deb115:~$ rep="$HOME/tstquatrechiffres"                        # Réperoire depuis lequel les fichiers à modifier seront cherchés

michel@deb115:~$ for f in "$rep"/**/*; do [[ $f =~ $maReg ]] && echo mv "$f" "${f/${BASH_REMATCH[1]}/\(${BASH_REMATCH[1]}\)}"; done
mv /home/michel/tstquatrechiffres/BBfich123ab1234(xx /home/michel/tstquatrechiffres/BBfich123ab(1234)(xx
mv /home/michel/tstquatrechiffres/CCfich123ab1234xx /home/michel/tstquatrechiffres/CCfich123ab(1234)xx
mv /home/michel/tstquatrechiffres/DDfic h5678ab 134xx /home/michel/tstquatrechiffres/DDfic h(5678)ab 134xx
mv /home/michel/tstquatrechiffres/EEfic(h5678ab134xx /home/michel/tstquatrechiffres/EEfic(h(5678)ab134xx
mv /home/michel/tstquatrechiffres/FFfich5678ab134xx /home/michel/tstquatrechiffres/FFfich(5678)ab134xx
mv /home/michel/tstquatrechiffres/fichier 2666.txt /home/michel/tstquatrechiffres/fichier (2666).txt
mv /home/michel/tstquatrechiffres/fichier 4656 fff 22.txt /home/michel/tstquatrechiffres/fichier (4656) fff 22.txt
mv /home/michel/tstquatrechiffres/fichier 4656.txt /home/michel/tstquatrechiffres/fichier (4656).txt
mv /home/michel/tstquatrechiffres/sous-rep/GGafg 1234xyz /home/michel/tstquatrechiffres/sous-rep/GGafg (1234)xyz
mv /home/michel/tstquatrechiffres/sous-rep/HHkjhkjh5678gfd /home/michel/tstquatrechiffres/sous-rep/HHkjhkjh(5678)gfd
michel@deb115:~$ 

michel@deb115:~$ shopt -u globstar nullglob dotglob      # je désactive les options du shell 'bash'

Si les lignes de commandes affichées conviennent,
il n'y aura plus qu'à enlever la commande echo qui est dans l'avant dernière ligne de commandes que je viens de lancer ci-dessus.

=======
Pour ne traiter que le contenu du répertoire <=> sans le contenu des sous-répertoires,
il n'est pas nécessaire d'activer les options globstar nullglob dotglob du shell bash
et la ligne de commande (sans le echo) serait :

rep="$HOME/tstquatrechiffres"; maReg='[^([:digit:]]([[:digit:]]{4})[^)[:digit:]]'; for f in "$rep"/*; do [[ $f =~ $maReg ]] && mv "$f" "${f/${BASH_REMATCH[1]}/\(${BASH_REMATCH[1]}\)}"; done

Dernière modification par MicP (Le 11/11/2022, à 04:16)

Hors ligne

#8 Le 11/11/2022, à 01:40

Watael

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

y a-t-il une différence de temps de traitement ?
je présume toujours que find est plus rapide ...

et, si, il vaut mieux toujours activer nullglob : ça évite de traiter littéralement le Développement de chemins. hmm
smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 11/11/2022, à 02:04

MicP

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

… y a-t-il une différence de temps de traitement ?  …

J'imagine que faire lancer un process find par un shell bash et faire lancer par ce find d'autres process pour lancer l'exécution de la commande rename pour chacun des fichiers trouvés devrait faire perdre beaucoup plus de temps que tout faire faire par un seul shell bash.

… et, si, il vaut mieux toujours activer nullglob

J'ai simplement laissé l'endroit aussi propre que je l'ai trouvé : j'ai remis les options dans le même état qu'elles étaient par défaut sur mon système.

… : ça évite de traiter littéralement le Développement de chemins.…

Je vais y penser, merci smile
mais pour aider sur les forums, j'essaye juste de rester avec les options par défaut pour que ça corresponde à ce que les lecteurs trouveront sur leur système (s'ils ne l'ont pas modifié)

Dernière modification par MicP (Le 11/11/2022, à 02:12)

Hors ligne

#10 Le 11/11/2022, à 02:53

Hizoka

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

J'imagine que faire lancer un process find par un shell bash et faire lancer par ce find d'autres process pour lancer l'exécution de la commande rename pour chacun des fichiers trouvés devrait faire perdre beaucoup plus de temps que tout faire faire par un seul shell bash.

Ce n'est pas ce que fait ma commande, si je ne dis pas de bêtise, il n'y a pas 1 rename par fichier :

man find a écrit :

       -exec commande {} +
              Cette variante de l'option -exec exécute la commande spécifiée sur les fichiers sélectionnés, mais en ajoutant le nom de chaque fichier trouvé à la fin de la ligne de commande. Le nombre  total  d'invocations  de  la
              commande  sera  donc  très  inférieur au nombre de fichiers trouvés. La ligne de commande est construite à la manière de xargs. Une seule instance de « {} » est permise à l'intérieur de la commande et elle doit appa‐
              raître à la fin et immédiatement avant le « + » ; elle doit être échappée (avec un « \ ») ou entre guillemets pour la protéger d'une interprétation par les interpréteurs. La commande sera exécutée dans le  répertoire
              de  départ.  Si  une  invocation avec la forme « + » renvoie une valeur différente de zéro comme code de retour, alors find renvoie un code de retour différent de zéro. Si find rencontre une erreur, cela peut parfois
              provoquer une fin immédiate, aussi certaines commandes en attente pourraient ne pas être exécutées. C'est pourquoi -exec ma_commande ... {} \+ -quit peut n'aboutir à aucune exécution de ma_commande. Cette variante de
              -exec renvoie toujours vrai.

Par contre, toi, tu lances 1 commande mv par fichier.

Ta proposition ne respecte pas la demande initiale qui est de ne pas traiter les fichiers avec ( dans le nom.
Même si je pense que ta proposition répond encore mieux que demandé smile


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

Hors ligne

#11 Le 11/11/2022, à 04:12

MicP

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Difficile de comparer les deux étant donné que la commande rename peut tout aussi bien être un script perl ou autre chose en fonction de la commande rename qui sera installée ou/et sélectionnée dans les alternatives,
et que d'un autre côté, la ligne de commande que je propose d'utiliser se sert d'une commande interne au shell au lieu de la commande find pour trouver les fichiers sur lesquels la commande (externe) mv sera lancée.

En fait, il faudrait faire plusieurs tests pour pouvoir comparer les performances (si tant est que ce soit le but recherché) et faire son choix en fonction du contexte.

Hors ligne

#12 Le 11/11/2022, à 08:45

iznobe

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Bonjour a tous et bon weekend .

oulà je ne pensais pas qu ' il y aurait autant de reponse .
Alors pour commencer pour ce qui est de trouver la liste des noms fichiers de fichiers ne comportant pas de ' ( ' aucun ne fonctionne , ou bien je m' y suis mal pris pour mes faires tests .
pas parfaite ( car affiche les noms de dossiers ) ma proposition de depart liste par contre les bon noms parmi toute la liste .

je n' ai pas encore fini de tout lire et repondrai au renommagea traité des que j ' aurais fini de lire ( comprendre ) et de faire les tests .

Merci encore et a tout a l' heure .

Dernière modification par iznobe (Le 11/11/2022, à 09:28)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#13 Le 11/11/2022, à 11:17

iznobe

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Bizzarement je viens de retester tout du debut :
la solution de @pingouinux pour le listing des fichiers fonctionne .
celle de @watael , ne retourne aucun resultat . et pourtant il y en a un wagon .

Pour le renommage :
la version de @hizoka pour le renommage fonctionne .
les 2 versions ( simple et recursives ) de @pingouinux pour le renommage ne fonctionne pas .
la version de @MicP pour le renommage fonctionne .

cela dit , il y a des differences entres la version de @Hizoka et celle de @Micp .
celle de @MicP , prend vraiment toutes les suites de 4 caracteres numeriques succesifs .
celle de @Hizoka ne prend que les suites de 4 caracteres numeriques succesifs qui sont separés par un espace .
EDIT : en fait non ce n' est pas par un espace , on dirait que ca ne prend en consideration qu ' un seule occurence dans le cas ou il y en a plusieurs .

Dernière modification par iznobe (Le 11/11/2022, à 11:42)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#14 Le 11/11/2022, à 11:31

Hizoka

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Si tu ne veux que les fichiers, ajoute -type f à la commande find.


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

Hors ligne

#15 Le 11/11/2022, à 11:53

iznobe

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Merci Hizoka . Mais ta CLI ne gere pas les multiples occurences de suite de 4 caracteres numeriques successifs , ( curieusement ) elle ne prend en compte que la derniere rencontrée dans le nom des fichiers .

@MicP , ton mini script ne gere pas le deplacement des dossiers lorsque ceux-ci doivent etre renommés . Mais ca tombe plutot bien , je ne veux pas renommer les dossiers , uniquement les fichiers , mais j' ai besoin de traiter les fichiers situés dans des sous-repertoires .
En fait non , avec celui de @MicP , seul 2 occurences de suites de 4 caracteres numeriques consécutifs sont pris en compte , pas le 3eme .

Dernière modification par iznobe (Le 11/11/2022, à 12:21)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#16 Le 11/11/2022, à 12:22

iznobe

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

oui c' est pour cela , que j ' ai refais mes tests , et modifié mes messages .
Pour le moment , je suis donc en phase de test ( je laisse donc la commande ' echo ' devant le ' mv ' ) .

Dernière modification par iznobe (Le 11/11/2022, à 12:24)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#17 Le 11/11/2022, à 12:35

Tawal

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Hello,

Pour que la commande d'Hizoka prenne en compte toutes les occurrences de 4 chiffres (non encadrée par des parenthèses),
il suffit d'ajouter le paramètre "g" à la commande de subsitution "s" de rename
(edit : et d'enlever les (.*) en début et fin
edit2 : ajout de -type f) :

find . -type f -regex "[^(]*[^0-9(][0-9][0-9][0-9][0-9][^0-9(][^(]*" -exec rename -n "s/([0-9][0-9][0-9][0-9])/(\$1)/g" "{}" \+

Test :

$ ls -l
total 0
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18 'AAfich123ab(1234)xx'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18 'BBfich123ab1234(xx'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18  CCfich123ab1234xx
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18  DDfich5678ab134xx
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18 'EEfic(h5678ab134xx'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18  FFfich5678ab134xx
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:21 'fich1234data5678 et encore 4 chiffres 9876.ext_a_la_con58'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18  fichier46.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18  fichier266.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18  fichier2666.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18  fichier4656.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18  fichier4656fff22.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18  fichier14656.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18 'fichier(2225).txt'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18 'fichier(3000).txt'
$ 
$ find . -type f -regex "[^(]*[^0-9(][0-9][0-9][0-9][0-9][^0-9(][^(]*" -exec rename -n "s/([0-9][0-9][0-9][0-9])/(\$1)/g" "{}" \+
rename(./fichier2666.txt, ./fichier(2666).txt)
rename(./FFfich5678ab134xx, ./FFfich(5678)ab134xx)
rename(./fich1234data5678 et encore 4 chiffres 9876.ext_a_la_con58, ./fich(1234)data(5678) et encore 4 chiffres (9876).ext_a_la_con58)
rename(./CCfich123ab1234xx, ./CCfich123ab(1234)xx)
rename(./fichier4656fff22.txt, ./fichier(4656)fff22.txt)
rename(./DDfich5678ab134xx, ./DDfich(5678)ab134xx)
rename(./fichier4656.txt, ./fichier(4656).txt)
$

Dernière modification par Tawal (Le 11/11/2022, à 12:39)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#18 Le 11/11/2022, à 12:38

iznobe

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

@MicP : Dans certains cas , avec les commandes de ton 1er post j ' obtiens :

mv: impossible de déplacer './nom fichier (1998-2007)/nom fichier 1998 .pdf' vers './nom fichier ((1998)-2007)/nom fichier 1998.pdf': Aucun fichier ou dossier de ce type

Dernière modification par iznobe (Le 11/11/2022, à 12:43)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#19 Le 11/11/2022, à 12:42

iznobe

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

@Tawal :

Tawal a écrit :

Pour que la commande d'Hizoka prenne en compte toutes les occurrences de 4 chiffres (non encadrée par des parenthèses),
il suffit d'ajouter le paramètre "g" à la commande de subsitution "s" de rename
(edit : et d'enlever les (.*) en début et fin) :

find . -regex "[^(]*[^0-9(][0-9][0-9][0-9][0-9][^0-9(][^(]*" -exec rename -n "s/([0-9][0-9][0-9][0-9])/(\$1)/g" "{}" \+

la commande ne parait pas / plus etre recursive , mais a l' air de bien fonctionner .

bien que , pas si sur , dans le resultat de ton test :

-rw-r--r-- 1 tawal tawal 0 11 nov.  11:18 'EEfic(h5678ab134xx'

EEfic(h5678ab134xx
ce fichier qui comporte bien 4 chiffres consecutifs non encadré par des parenthèses n ' est pas renommé .

Dernière modification par iznobe (Le 11/11/2022, à 12:53)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#20 Le 11/11/2022, à 12:45

Tawal

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Sur de grandes quantités de fichiers à renommer, je pense que la solution find+rename sera plus rapide car elle traite les fichiers par lots (un appel à rename par lot).
Tandis que la solution bash traite fichier par fichier et fait un appel mv par fichier.


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#21 Le 11/11/2022, à 12:49

Tawal

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Dans mon dossier de test, il n'y a que des fichiers, pas d'arborescence.

Voici un test avec un dossier contenant les mêmes fichiers que son parent :

$ ls -l
total 4,0K
drwxr-xr-x 2 tawal tawal 4,0K 11 nov.  11:47  Test2
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18 'AAfich123ab(1234)xx'
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18 'BBfich123ab1234(xx'
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18  CCfich123ab1234xx
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18  DDfich5678ab134xx
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18 'EEfic(h5678ab134xx'
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18  FFfich5678ab134xx
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:21 'fich1234data5678 et encore 4 chiffres 9876.ext_a_la_con58'
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18  fichier46.txt
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18  fichier266.txt
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18  fichier2666.txt
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18  fichier4656.txt
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18  fichier4656fff22.txt
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18  fichier14656.txt
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18 'fichier(2225).txt'
-rw-r--r-- 1 tawal tawal    0 11 nov.  11:18 'fichier(3000).txt'
$ ls -l Test2
total 0
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47 'AAfich123ab(1234)xx'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47 'BBfich123ab1234(xx'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47  CCfich123ab1234xx
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47  DDfich5678ab134xx
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47 'EEfic(h5678ab134xx'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47  FFfich5678ab134xx
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47 'fich1234data5678 et encore 4 chiffres 9876.ext_a_la_con58'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47  fichier46.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47  fichier266.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47  fichier2666.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47  fichier4656.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47  fichier4656fff22.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47  fichier14656.txt
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47 'fichier(2225).txt'
-rw-r--r-- 1 tawal tawal 0 11 nov.  11:47 'fichier(3000).txt'
$ 
$ find . -regex "[^(]*[^0-9(][0-9][0-9][0-9][0-9][^0-9(][^(]*" -exec rename -n "s/([0-9][0-9][0-9][0-9])/(\$1)/g" "{}" \+
rename(./fichier2666.txt, ./fichier(2666).txt)
rename(./FFfich5678ab134xx, ./FFfich(5678)ab134xx)
rename(./fich1234data5678 et encore 4 chiffres 9876.ext_a_la_con58, ./fich(1234)data(5678) et encore 4 chiffres (9876).ext_a_la_con58)
rename(./CCfich123ab1234xx, ./CCfich123ab(1234)xx)
rename(./Test2/fichier2666.txt, ./Test2/fichier(2666).txt)
rename(./Test2/FFfich5678ab134xx, ./Test2/FFfich(5678)ab134xx)
rename(./Test2/fich1234data5678 et encore 4 chiffres 9876.ext_a_la_con58, ./Test2/fich(1234)data(5678) et encore 4 chiffres (9876).ext_a_la_con58)
rename(./Test2/CCfich123ab1234xx, ./Test2/CCfich123ab(1234)xx)
rename(./Test2/fichier4656fff22.txt, ./Test2/fichier(4656)fff22.txt)
rename(./Test2/DDfich5678ab134xx, ./Test2/DDfich(5678)ab134xx)
rename(./Test2/fichier4656.txt, ./Test2/fichier(4656).txt)
rename(./fichier4656fff22.txt, ./fichier(4656)fff22.txt)
rename(./DDfich5678ab134xx, ./DDfich(5678)ab134xx)
rename(./fichier4656.txt, ./fichier(4656).txt)
$

La commande est bien récursive wink


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#22 Le 11/11/2022, à 12:55

Tawal

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

iznobe a écrit :

EEfic(h5678ab134xx
ce fichier qui comporte bien 4 chiffres consecutifs non encadré par des parenthèses n ' est pas renommé .

Oui, mais il y a exclusion car le fichier contient un caractère interdit (parenthèse ouvrante ici).
C'était ta demande du début, non ?

Edit:
Si tu veux changer de caractère "interdit", il faut remplacer toutes les "(" par le caractère choisi dans la 1ere regex wink

Dernière modification par Tawal (Le 11/11/2022, à 12:57)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#23 Le 11/11/2022, à 12:56

iznobe

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

ok , je reformule , c ' es pas tres simple  parfois de traduire avec des mots .

j ' ai des noms de fichiers qui comporte pour certains des parentheses suplementaires et des suites  de 4 chiffres encadrés et pas encadrés par des parentheses .

je voudrais obtenir uniquement des noms de fichiers pour lesquels les suites de 4 chiffres sont tous encadrés par des () , meme si leur noms en contient dejà , par exemple le resultat ideal serait :
fichier de (test) (1998).extension
(2012) fichier de (test) (1998).extension
212 fichier de (test) (1998).extension

Dernière modification par iznobe (Le 11/11/2022, à 13:01)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#24 Le 11/11/2022, à 12:58

Tawal

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

Bizarre, ma réponse est avant ton message.
Donc voir au dessus du tien tongue

Dernière modification par Tawal (Le 11/11/2022, à 13:00)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#25 Le 11/11/2022, à 13:02

iznobe

Re : [ resolu ] renommer fichiers comportant 4 chiffres consecutifs

oui tu as lvu mon edit big_smile , du coup j ' ai remodifié mon message lol

j ' avais fais une recherche sur la parenthese ouvrante ( par flemme , car je ne sais pas manipulé les regex ) uniquement sur une parenthese ouvrante au lieu de la suite de 4 chiffre sans parentheses . ca me rapelle un syndrome du xyz ...
c ' est ma faigneantise qui a induit ce malentendu .

je cherche donc simplement a renommer toutes les suites de 4 chiffres non encadrés par des parenthèses en : (1234) .

Dernière modification par iznobe (Le 11/11/2022, à 13:06)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne