Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

liste fichiers ".*"

8 réponses
Avatar
Hugolino
Bonjour,

Je souhaite récupérer la liste de tous les fichiers commençant par un
point, mais bien sûr *sans* le fichier "." qui désigne le répertoire
courant, tel que le renvoie

find . -maxdepth 1 -iname "\.*"

Une /presque/ bonne solution est

find . -maxdepth 1 -iname "\.[A-Za-z]*"

Mais pourquoi

find . -maxdepth 1 -iname "\.+"

ne me renvoie-t-il rien ?

(et je vous passe tous mes essais infructueux)

Merci de votre aide.

--
> Dictature _éclairée_, s'il te plaît. :-)
Les leds du switch qui clignotent, c'est moyen comme éclairage.
Hugo (né il y a 1 446 937 777 secondes)

8 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 01/03/2010 23:11, Hugolino a écrit :

Je souhaite récupérer la liste de tous les fichiers commençant par un
point, mais bien sûr *sans* le fichier "." qui désigne le répertoire
courant, tel que le renvoie

find . -maxdepth 1 -iname ".*"



Sauf erreur, le n'est pas nécessaire puisque le « . » n'est pas un
caractère spécial ici. Au passage, -name ferait aussi bien que -iname
puisque tu n'as pas mis de lettres ! ;-)

Une /presque/ bonne solution est

find . -maxdepth 1 -iname ".[A-Za-z]*"



Bon, en fait je crois que tu te trompes de regexp, tout simplement. Avec
-name ou -iname, ce qui suit est un "shell pattern" : « * » a donc la
signification du « .* » des regexps habituelles, et non celle de simple
multiplicateur. Et c'est « ? » qui a la signification du « . » des regexps.

Mais pourquoi

find . -maxdepth 1 -iname ".+"

ne me renvoie-t-il rien ?



Parce que ceci ne peut retourner qu'un nom de deux caractères, dont le
premier caractère est un point et le deuxième un plus. Si tu n'as pas de
fichier qui s'appelle « .+ » il ne renverra rien.

Merci de votre aide.



find . -maxdepth 1 -name ".?*"

--
Olivier Miakinen
Avatar
Bruno Tréguier
Le 01/03/2010 à 23:11, Hugolino a écrit :
Bonjour,



[...]

Mais pourquoi

find . -maxdepth 1 -iname ".+"

ne me renvoie-t-il rien ?

(et je vous passe tous mes essais infructueux)



Bonsoir,

La commande ne vous renvoie rien tout simplement parce que les options
"name" et "iname" de find n'attendent pas des expressions rationnelles
au sens strict, mais des chaînes de "filename pattern matching" comme le
shell en utilise (voir "pathname expansion" dans le man du shell que
vous utilisez, ou encore, faites un "man fnmatch"). La syntaxe est
légèrement différente (par exemple, 1 caractère "joker" est représenté
par "?" et non par ".") et assez limitée par rapport aux "regex"
proprement dites.

Vous avez essayé de regarder ce que les options "regex" et "iregex"
pouvaient faire pour vous (si votre version de find le supporte) ?

Un truc du genre:

find . -maxdepth 1 -regex "./..+"

pourrait fonctionner, non ? Il faut prévoir le "./" au début car la
sortie sera du style:

./.profile
./.dbus
./.gqview
./.java

etc.

Cordialement,

Bruno
Avatar
Bruno Tréguier
Le 01/03/2010 à 23:55, Olivier Miakinen a écrit :

find . -maxdepth 1 -name ".?*"



Bonsoir Olivier,

Pfff, beaucoup plus concis et utilisable que le mien effectivement.
Je vais me coucher, du coup, tiens ! :-D

Cordialement,

Bruno "pourquoi faire simple ?"
Avatar
Hugolino
Le 01-03-2010, Olivier Miakinen <om+ a écrit :
Bonjour,

Le 01/03/2010 23:11, Hugolino a écrit :
>
> <...>
Bon, en fait je crois que tu te trompes de regexp, tout simplement. Avec
-name ou -iname, ce qui suit est un "shell pattern" : « * » a donc la
signification du « .* » des regexps habituelles, et non celle de simple
multiplicateur. Et c'est « ? » qui a la signification du « . » des regexps.



<jpp>
Ah ?!! OK, OK, OK...
</jpp>

> <...>

find . -maxdepth 1 -name ".?*"



Parfait, merci à toi.


(Signature presque aléatoire)

--
Unix is user friendly. It's just selective about who his friends are.
-+- Tollef Fog Heen -+-
Hugo (né il y a 1 446 937 777 secondes)
Avatar
Hugolino
Le 01-03-2010, Bruno Tréguier a écrit :
Le 01/03/2010 à 23:11, Hugolino a écrit :
> Mais pourquoi
>
> find . -maxdepth 1 -iname ".+"
>
> ne me renvoie-t-il rien ?
>
> (et je vous passe tous mes essais infructueux)

La commande ne vous renvoie rien tout simplement parce que les options
"name" et "iname" de find n'attendent pas des expressions rationnelles
au sens strict, mais des chaînes de "filename pattern matching" comme le
shell en utilise (voir "pathname expansion" dans le man du shell que
vous utilisez, ou encore, faites un "man fnmatch"). La syntaxe est
légèrement différente (par exemple, 1 caractère "joker" est représenté
par "?" et non par ".") et assez limitée par rapport aux "regex"
proprement dites.



OK, je tacherai de penser à cette subtile distinction la prochaine fois.

Vous avez essayé de regarder ce que les options "regex" et "iregex"
pouvaient faire pour vous (si votre version de find le supporte) ?

Un truc du genre:

find . -maxdepth 1 -regex "./..+"

pourrait fonctionner, non ? Il faut prévoir le "./" au début car la
sortie sera du style:



Oui, cette commande renvoie le même résultat que celle d'Olivier. (chez
moi en tout cas)

./.profile
./.dbus
./.gqview
./.java

etc.

Cordialement,



Tout pareil.

Bruno




--
catch(Exception putainFaitChier){
putainFaitChier.printStackTrace();
System.out.println("Bordel!");
}
Avatar
xavier
Hugolino wrote:

(Signature presque aléatoire)



Il y a longtemps qu'il a été prouvé que fortune avait une vie propre.

--
XAv
Disponible au 01/06/2010 - peut-être...peut-être pas...
<http://www.xavierhumbert.net/perso/CV2.html>
Avatar
Olivier Miakinen
Le 05/03/2010 17:42, Xavier a écrit :

Il y a longtemps qu'il a été prouvé que fortune avait une vie propre.



Peut-être bien. Mais il ne faut pas prêter aux programmes des sentiments
humains : ils n'aiment pas ça.

--
Olivier Miakinen
Avatar
Cyrille Lefevre
Olivier Miakinen a écrit :
Le 05/03/2010 17:42, Xavier a écrit :
Il y a longtemps qu'il a été prouvé que fortune avait une vie pr opre.



Peut-être bien. Mais il ne faut pas prêter aux programmes des senti ments
humains : ils n'aiment pas ça.




Bonjour,

qui ça ? les programmes ou les humains ?

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.