#1 Le 28/05/2025, à 17:56
- david69
[Resolu] Identifier des fichiers dont le titre a un caractere special
Bonjour,
Je veux identifier tous mes fichiers mp3 dont le titre comporte un caractere special tel que: ? ou : ou *.
Par ex: 01 - Asylum?.mp3
Sans succes avec
find /home/dvd/Musique/ -name "*?*.mp3"
plus quelques variantes, d'ou ce post.
Trivial sans doute mais je tourne en rond.
Dernière modification par david69 (Le 28/05/2025, à 21:41)
Hors ligne
#2 Le 28/05/2025, à 18:09
- jpoc
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
caractères significations
\ L'antislash échappe les caractères spéciaux et les caractères d'échappement.
“ ” Les doubles guillemets empêchent l'interprétation de la plupart des caractères spéciaux présents dans une chaîne.
' ' Les guillemets simples empêchent l'interprétation de tous les caractères spéciaux présents dans la chaîne. Ces guillemets sont plus puissants que “3)
# Le dièse permet dans un script de faire des commentaires; tout ce qui est après # ne sera pas exécuté.
” “ , ' ' , \ Les doubles guillemets, simples guillemets et antislash échappent le dièse # .
\ L'antislash échappe le double guillemets ” .
“ ” Les doubles guillemets n'échappent pas le caractère $ .
comme l'etoile est dans les guillemets "*?" , elle n'est pas interpretée comme caractère special
Dernière modification par jpoc (Le 28/05/2025, à 18:12)
Hors ligne
#3 Le 28/05/2025, à 18:22
- diesel
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
D'où :
find /home/dvd/Musique/ -name *\?.mp3
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#4 Le 28/05/2025, à 18:51
- david69
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Hum
find /home/dvd/Musique/ -name *\?.mp3
me renvoie l'ensemble de mes fichiers sous ce chemin et non uniquement ceux comportant dans le titre le caractere ?
Merci pour les explications sur les differents guillemets. Mes lectures ne precisaient pas cela.
Par échapper, il faut comprendre ne prend pas en compte?
Dernière modification par david69 (Le 28/05/2025, à 18:52)
Hors ligne
#5 Le 28/05/2025, à 19:33
- geole
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Bonjour
et
find /home/dvd/Musique/ -name "*\?*.mp3"
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#6 Le 28/05/2025, à 20:04
- steph810
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Bonsoir,
Modifier juste ce qu'il se trouve entre [ ] à votre convenance
find /home/dvd/Musique/ -iregex '.*/.*[?*].*'
Dernière modification par steph810 (Le 28/05/2025, à 20:23)
Hors ligne
#7 Le 28/05/2025, à 20:30
- RaphaelG
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
On peut utiliser les regexes.
find /home/dvd/Musique -regextype egrep -regex '.*\?.*\.mp3'
Les regexes ont aussi des métacaractères différents de ceux du bash.
'.' est le joker (wildcard) qui remplace n'importe quel caractère. Si on veut utiliser sa valeur litérale, il faut l'échapper avec un '\' (backslash) devant lui.
'*', l'étoile, est un quantifieur qui répète le caractère le précédant, 0 ou plusieurs (infini possible) fois.
'?' est aussi un quantifieur mais comme on veut sa valeur litérale, on l'a échapper avec '\'.
Notre motif est encadré par des simple quotes donc ce ne sont plus des métacaractères pour bash.
Pour les fichiers avec '*' dans leur nom, ce sera le même style de motif :
find /home/dvd/Musique -regextype egrep -regex '.*\*.*\.mp3'
Hors ligne
#8 Le 28/05/2025, à 21:08
- RaphaelG
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Nous nous sommes télescopés avec steph810.
Astucieux, Steph, tu fais les 2 recherches en une seule.
Par contre je ne comprends pas pourquoi tu t'affranchis de la distinction majuscule/minuscule puisque ton motif ne comporte pas de caractère de l'alphabet.
Mais du coup je me rends compte que mon motif à moi, passe à coté des fichers .MP3.
Ma nouvelle proposition :
find /home/dvd/Musique -regextype egrep -regex '.*[?*].*\.[mM][pP]3'
La "bracket expression", [...], correspond à un seul caractère pris parmi ceux listés entre les crochets. A l'intérieur d'une bracket expression les caractères perdent leur propiété méta (sauf '^', '-' et ']' donc on a pas à les échapper.
Un autre motif possible en utilisant le groupement, (...) et le ou logique '|' en sachant que la concaténation du 'm' avec le 'p' et du 'M' avec 'P' est prioritaire sur le '|'.
.*[?*].*\.(mp|MP)3
Ce dernier motif ne touchera pas les fichiers .mP3 et .Mp3.
Dernière modification par RaphaelG (Le 28/05/2025, à 21:16)
Hors ligne
#9 Le 28/05/2025, à 21:16
- Watael
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
-iregex pattern
Like -regex, but the match is case insensitive
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#10 Le 28/05/2025, à 21:39
- david69
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
@RaphaelG merci
find /home/dvd/Musique -regextype egrep -regex '.*[?*].*\.[mM][pP]3'
me retourne les fichiers qui vont bien. Je suis tres loin d'imaginer une telle grammaire.
merci a tous pour vos contributions
Dernière modification par david69 (Le 28/05/2025, à 21:40)
Hors ligne
#11 Le 28/05/2025, à 21:56
- RaphaelG
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
@Watael
Oui, j'avais bien compris. Je voulais faire un exercice de style sans utiliser l'option iregex; à des fins purement didactique, une sorte de petit tuto regex en quelque sorte.
Sinon quand est ce que tu nous trouves une solution utilisant le bash globbing ?
Parce que les propositions de geole ne fonctionnent pas. D'ailleurs, j'ai du mal à comprendre pourquoi pour sa 1ère proposition.
Hors ligne
#12 Le 28/05/2025, à 22:07
- steph810
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Nous nous sommes télescopés avec steph810.
Astucieux, Steph, tu fais les 2 recherches en une seule.
Par contre je ne comprends pas pourquoi tu t'affranchis de la distinction majuscule/minuscule puisque ton motif ne comporte pas de caractère de l'alphabet.
Mais du coup je me rends compte que mon motif à moi, passe à coté des fichers .MP3.
Ma nouvelle proposition :find /home/dvd/Musique -regextype egrep -regex '.*[?*].*\.[mM][pP]3'
La "bracket expression", [...], correspond à un seul caractère pris parmi ceux listés entre les crochets. A l'intérieur d'une bracket expression les caractères perdent leur propiété méta (sauf '^', '-' et ']' donc on a pas à les échapper.
Un autre motif possible en utilisant le groupement, (...) et le ou logique '|' en sachant que la concaténation du 'm' avec le 'p' et du 'M' avec 'P' est prioritaire sur le '|'..*[?*].*\.(mp|MP)3
Ce dernier motif ne touchera pas les fichiers .mP3 et .Mp3.
Oui merci du rappel j'avais oublier l'extensions
Ont peut faire beaucoup de chose avec les regex
find /home/dvd/Musique/ -iregex '.*/.*[?*].*\.mp3'
Dernière modification par steph810 (Le 28/05/2025, à 22:10)
Hors ligne
#13 Le 28/05/2025, à 22:16
- Watael
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Oui, j'avais bien compris. Je voulais faire un exercice de style sans utiliser l'option iregex; à des fins purement didactique, une sorte de petit tuto regex en quelque sorte.
oops. pas vu le #6.
Sinon quand est ce que tu nous trouves une solution utilisant le bash globbing ?
soit
$ ls -1 /tmp/mus*
/tmp/musique.mp3
'/tmp/mus*que.mp3'
'/tmp/mus?que.mp3'
/tmp/musique.mP3
'/tmp/mus*que.mP3'
'/tmp/mus?que.mP3'
/tmp/musique.Mp3
'/tmp/mus*que.Mp3'
'/tmp/mus?que.Mp3'
/tmp/musique.MP3
'/tmp/mus*que.MP3'
'/tmp/mus?que.MP3'
comme ça
$ printf '%s\n' /tmp/*[?*]*.[mM][pP]3
/tmp/mus*que.mp3
/tmp/mus?que.mp3
/tmp/mus*que.mP3
/tmp/mus?que.mP3
/tmp/mus*que.Mp3
/tmp/mus?que.Mp3
/tmp/mus*que.MP3
/tmp/mus?que.MP3
$
?
vous aviez déjà tout préparé.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#14 Le 28/05/2025, à 22:53
- steph810
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
RaphelG a écrit :Oui, j'avais bien compris. Je voulais faire un exercice de style sans utiliser l'option iregex; à des fins purement didactique, une sorte de petit tuto regex en quelque sorte.
oops. pas vu le #6.
RaphelG a écrit :Sinon quand est ce que tu nous trouves une solution utilisant le bash globbing ?
soit
$ ls -1 /tmp/mus* /tmp/musique.mp3 '/tmp/mus*que.mp3' '/tmp/mus?que.mp3' $
?
vous aviez déjà tout préparé.
ls -l [?-*]*
Hors ligne
#15 Le 28/05/2025, à 23:08
- RaphaelG
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Well done Watael. Je savais qu'on pouvait compter sur toi.
Pour david69, retranscrit dans un find, cela donne :
find /home/dvd/Musique -name *[?*]*.[mM][pP]3
J'aimerais te solliciter à nouveau, Watael, à propos de la proposition de Diesel (je l'avais confondu avec geole) en #3.
Comment expliquer son comportement décrit en #4 ? (à savoir tous les fichiers se terminant par .mp3 sont trouvés)
@steph810
Ca marche pas ton "ls -l [?-*]*".
Hors ligne
#16 Le 28/05/2025, à 23:47
- steph810
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Well done Watael. Je savais qu'on pouvait compter sur toi.
Pour david69, retranscrit dans un find, cela donne :find /home/dvd/Musique -name *[?*]*.[mM][pP]3
J'aimerais te solliciter à nouveau, Watael, à propos de la proposition de Diesel (je l'avais confondu avec geole) en #3.
Comment expliquer son comportement décrit en #4 ? (à savoir tous les fichiers se terminant par .mp3 sont trouvés)@steph810
Ca marche pas ton "ls -l [?-*]*".
:[ oui je vois désoler oublier de test c'est a cause du ? qui peut être utiliser dans le glob aussi du coup !! error
Hors ligne
#17 Hier à 01:29
- Watael
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Pour david69, retranscrit dans un find, cela donne :
find /home/dvd/Musique -name *[?*]*.[mM][pP]3
ce n'est pas le shell qui doit interpréter l'expression, c'est find, et pour ça, il faut mettre l'expression entre apostrophes.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#18 Hier à 01:53
- RaphaelG
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Chez moi, ça marche avec ou sans les double quotes.
IT$ find . -name *[?*]*.[mM][pP]3
./regex/tot?to.mp3
./regex/ta*ta.mp3
IT$ find . -name "*[?*]*.[mM][pP]3"
./regex/tot?to.mp3
./regex/ta*ta.mp3
IT$
Hors ligne
#19 Hier à 02:05
- Watael
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
on a déjà vu des problèmes survenir quand plusieurs fichiers dans le répertoire courant correspondent au motif.
c'est d'ailleurs inscrit dans le man :
Don't forget to enclose the pattern in quotes in order to protect it from expansion by the shell.
regarde aussi le paragraphe NON-BUGS à la fin du man.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#20 Hier à 10:46
- david69
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
je ne pensais pas que ma requete allait declencher une telle emulation.
en fait si j'ai demande ici une ligne de commande, c'est parce que l'outil de recherche de fichiers (Outils > Trouver des fichiers) de PCManFM-QT (V0.17.0) ne me renvoyait pas le resultat attendu. Ou bien je ne sais pas m'en servir ou bien sa programmation ne sait pas prendre en compte ce type de recherche.
Hors ligne
#21 Hier à 14:07
- RaphaelG
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
Watael a raison ! (comme toujours ?)
Comment ai je pu oublier que dans les années 80, lorsque j'étais jeune débutant sur des Unix Sytem V, sans vraiment comprendre pourquoi, j'avais pris l'habitude avec find d'encadrer les noms de fichiers par des double quotes dès que j'utilisais des "wildcard characters" (à l'époque on ne disait pas "globbing" mais "filename expansion").
De même, j'avais aussi pris l'habitude de terminer toutes mes commandes find par "-print".
Tout ça était très empirique mais aussi très factuel. Si on ne le faisait pas, find ne retournait pas les bons résultats.
Mais, là, Watael vient de me donner une explication : ce n'est pas le shell qui doit faire le "filename expansion" mais find.
40 ans plus tard, "-print" est l'action par défaut mais encadrer les noms de fichier contenant des "wildcard characters" est toujours une sage précaution et je viens de comprendre pourquoi. Merci Watael.
Donc, comme le demande Watael, il faut encadrer le nom par des double quotes :
find /home/dvd/Musique -name "*[?*]*.[mM][pP]3"
Maintenant, la question à 2 balles :
Pour un petit gars qui veut apprendre comme david69 (ou moi même), dans quel domaine faut il approfondir en priorité ?
Le "bash globbing" ou les regexes ? Les 2 mon capitaine ?
@david69
Je pense que nous sommes tous là pour apprendre en s'amusant si possible, une sorte de quête du gai savoir à la F. Nietzsche.
Et là, tu viens d'apprendre que l'artisanat de la ligne de commande est souvent plus efficace que les usines à cliquer. J'espère que tu t'es amusé.
Hors ligne
#22 Hier à 14:35
- Watael
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
oui, les deux. Pourquoi utiliser une masse quand un marteau fait le boulot ? Mais quand c'est trop gros pour un marteau, il faut aussi pouvoir utiliser une masse !
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#23 Hier à 15:03
- david69
Re : [Resolu] Identifier des fichiers dont le titre a un caractere special
je n'irai pas jusqu'à dire que je me suis amusé : gratter sur le net sans succès, je suis souvent gêné de venir ici pour "embêter" sur de tels sujets par dépit.
simple utilisateur d'OS libre, je ne pousse pas plus loin que cela.
en près de 15 ans d'OS libre, c'est la première fois que j'ai ce besoin de recherche.
ce forum me sert de mémoire à mes besoins.
peut-être ce fil aidera d'autres utilisateurs.
Hors ligne