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)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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.
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
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
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:
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
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 ?"
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
Pfff, beaucoup plus concis et utilisable que le mien effectivement. Je vais me coucher, du coup, tiens ! :-D
Cordialement,
Bruno "pourquoi faire simple ?"
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)
Le 01-03-2010, Olivier Miakinen <om+news@miakinen.net> 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)
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)
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)
Le 01-03-2010, Bruno Tréguier <bruno.treguier_at_shom.fr@nullepart.invalid> 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)
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)