OVH Cloud OVH Cloud

find et fichiers .quelquechose

4 réponses
Avatar
Remi Moyen
Salut,

Est-il possible de spécifier un motif pour find -name de telle sorte que à
la fois les fichiers "normaux" et les fichiers commençant par '.' soient
matchés ?

Si je fais find . -name "*toto", il est dit explicitement dans le man que
'*' ne matche pas un '.' en début de nom.

Bien sûr, je peux faire find . -name ".toto", mais dans ce cas, je ne
marche plus *que* les fichiers commençant par '.'.

Évidemment, je peux faire deux find successifs, un avec '.' et l'autre
sans, mais c'est pas génial.

Alors... ?
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."

4 réponses

Avatar
Pascal Bourguignon
Remi Moyen writes:

Salut,

Est-il possible de spécifier un motif pour find -name de telle sorte que à
la fois les fichiers "normaux" et les fichiers commençant par '.' soient
matchés ?

Si je fais find . -name "*toto", il est dit explicitement dans le man que
'*' ne matche pas un '.' en début de nom.

Bien sûr, je peux faire find . -name ".toto", mais dans ce cas, je ne
marche plus *que* les fichiers commençant par '.'.

Évidemment, je peux faire deux find successifs, un avec '.' et l'autre
sans, mais c'est pas génial.

Alors... ?


man find
(tuyau: -o)

--
__Pascal Bourguignon__ http://www.informatimago.com/

There is no worse tyranny than to force a man to pay for what he does not
want merely because you think it would be good for him. -- Robert Heinlein

Avatar
Remi Moyen
On Wed, 21 Jul 2004, Pascal Bourguignon wrote:

Est-il possible de spécifier un motif pour find -name de telle sorte que à
la fois les fichiers "normaux" et les fichiers commençant par '.' soient
matchés ?
[...]


man find
(tuyau: -o)


Ah, oui ! Merci, c'est parfait !
J'avais essayé -name ".toto" -name "toto", en me doutant bien que ça
faisait un "et" logique, au vu des résultats, mais sans me rendre compte
qu'il y avait une section dédiée à ça dans le man.

(quoique c'est un peu lourd comme syntaxe, mais bon, ça marche)
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."


Avatar
Stephane Chazelas
2004-07-21, 15:13(+02), Remi Moyen:
Est-il possible de spécifier un motif pour find -name de telle sorte que à
la fois les fichiers "normaux" et les fichiers commençant par '.' soient
matchés ?

Si je fais find . -name "*toto", il est dit explicitement dans le man que
'*' ne matche pas un '.' en début de nom.
[...]


Ce qui fait de ton find un find non-POSIX conformant. Ca doit
etre le GNU find ou un vieux find.

Ce comportement peut s'averer assez genant.

Par exemple,

find . ! -name '*.txt' -exec rm '{}' ;

Va effacer un fichier .important.txt

Du coup, on est obligé si on veut que le script soit fiable et
portable sur Linux de faire :

find . ! ( -name '*.txt' -o -name '.*.txt' -o -name .txt ) -exec rm '{}' ;

Note qu'il existe (au moins) un find POSIX conformant pour Linux
(voir a heirloom.sourceforge.net)

--
Stephane

Avatar
Remi Moyen
On Wed, 21 Jul 2004, Stephane Chazelas wrote:

Est-il possible de spécifier un motif pour find -name de telle sorte que à
la fois les fichiers "normaux" et les fichiers commençant par '.' soient
matchés ?

Si je fais find . -name "*toto", il est dit explicitement dans le man que
'*' ne matche pas un '.' en début de nom.
[...]


Ce qui fait de ton find un find non-POSIX conformant. Ca doit
etre le GNU find ou un vieux find.


C'est le GNU find (4.1.20), oui.

Ce comportement peut s'averer assez genant.


Bah, sans même chercher tes exemples un peu contournés (en tout cas, pour
moi !), c'est génant simplement quand je veux rechercher à la fois dans
les fichiers avec et sans '.' au début.
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."