je dois trier un très grand nombre de fichiers qui contiennent une
ou plusieurs fois une pattern.
Je fais donc un grep, suivi d'un sort -u pour avoir une fois
uniquement les fichiers.
Est il possible avec grep de donner le nom du fichier une seule fois?
La commande est:
find directory/ -type f -exec grep "pattern" {} \; -print > /tmp/liste
Est il possible de n'avoir que le nom des fichiers comportant
pattern d'une manière plus élégante?
Merci
--
Kevin
On récapitule: - trouver les fichiers dont le contenu match <pattern> - à partir du nom du fichier, en déduire un autre - supprimer les deux fichiers
Oui
Un début de réponse:
#!/usr/bin/perl
Hélas, pas de perl sur ma plateforme. -- Kevin
Kevin Denis
Le 08-11-2008, Alain Montfranc a écrit :
On récapitule: - trouver les fichiers dont le contenu match <pattern> - à partir du nom du fichier, en déduire un autre - supprimer les deux fichiers
find directory -type f -print | xargs grep -l pattern | sed 's/qf(.*)/& df1 Df1' | xargs rm -f
D'accord, j'ajouterai un: find directory -type f -name "qf*" -print pour épurer un peu, mais j'ai du mal à comprendre le sed
Qu'on peut simplifier (si le grep accepte la recursivité ce qui n'est pas gagné si je me souviens des messages précédents) :
En fait, à partir d'un grand nombre de fichier, je me suis rendu compte qu'il vaut mieux démarrer par un find plutôt que tout autre commande. Par exemple, lorsque le nombre de fichiers dépasse la centaine de mille un: ls | wc -l ne rend jamais la main, alors qu'un find . -type f | wc -l est quasi immédiat -- Kevin
Le 08-11-2008, Alain Montfranc <x@x.con> a écrit :
On récapitule:
- trouver les fichiers dont le contenu match <pattern>
- à partir du nom du fichier, en déduire un autre
- supprimer les deux fichiers
find directory -type f -print | xargs grep -l pattern | sed
's/qf(.*)/& df1 Df1' | xargs rm -f
D'accord, j'ajouterai un:
find directory -type f -name "qf*" -print pour épurer un peu, mais
j'ai du mal à comprendre le sed
Qu'on peut simplifier (si le grep accepte la recursivité ce qui n'est
pas gagné si je me souviens des messages précédents) :
En fait, à partir d'un grand nombre de fichier, je me suis rendu compte
qu'il vaut mieux démarrer par un find plutôt que tout autre commande.
Par exemple, lorsque le nombre de fichiers dépasse la centaine de mille
un:
ls | wc -l
ne rend jamais la main, alors qu'un
find . -type f | wc -l
est quasi immédiat
--
Kevin
On récapitule: - trouver les fichiers dont le contenu match <pattern> - à partir du nom du fichier, en déduire un autre - supprimer les deux fichiers
find directory -type f -print | xargs grep -l pattern | sed 's/qf(.*)/& df1 Df1' | xargs rm -f
D'accord, j'ajouterai un: find directory -type f -name "qf*" -print pour épurer un peu, mais j'ai du mal à comprendre le sed
Qu'on peut simplifier (si le grep accepte la recursivité ce qui n'est pas gagné si je me souviens des messages précédents) :
En fait, à partir d'un grand nombre de fichier, je me suis rendu compte qu'il vaut mieux démarrer par un find plutôt que tout autre commande. Par exemple, lorsque le nombre de fichiers dépasse la centaine de mille un: ls | wc -l ne rend jamais la main, alors qu'un find . -type f | wc -l est quasi immédiat -- Kevin
Alain Montfranc
Kevin Denis a écrit
Le 08-11-2008, Alain Montfranc a écrit :
On récapitule: - trouver les fichiers dont le contenu match <pattern> - à partir du nom du fichier, en déduire un autre - supprimer les deux fichiers
find directory -type f -print | xargs grep -l pattern | sed 's/qf(.*)/& df1 Df1' | xargs rm -f
D'accord, j'ajouterai un: find directory -type f -name "qf*" -print pour épurer un peu, mais j'ai du mal à comprendre le sed
A partir du qfxxxxx ca cree qfxxxxx dfxxxxx Dfxxxxx poyr tout détruire
Qu'on peut simplifier (si le grep accepte la recursivité ce qui n'est pas gagné si je me souviens des messages précédents) :
En fait, à partir d'un grand nombre de fichier, je me suis rendu compte qu'il vaut mieux démarrer par un find plutôt que tout autre commande. Par exemple, lorsque le nombre de fichiers dépasse la centaine de mille un: ls | wc -l ne rend jamais la main, alors qu'un find . -type f | wc -l est quasi immédiat
Normal ls fait des tris...
Kevin Denis a écrit
Le 08-11-2008, Alain Montfranc <x@x.con> a écrit :
On récapitule:
- trouver les fichiers dont le contenu match <pattern>
- à partir du nom du fichier, en déduire un autre
- supprimer les deux fichiers
find directory -type f -print | xargs grep -l pattern | sed
's/qf(.*)/& df1 Df1' | xargs rm -f
D'accord, j'ajouterai un:
find directory -type f -name "qf*" -print pour épurer un peu, mais
j'ai du mal à comprendre le sed
A partir du qfxxxxx ca cree qfxxxxx dfxxxxx Dfxxxxx poyr tout détruire
Qu'on peut simplifier (si le grep accepte la recursivité ce qui n'est
pas gagné si je me souviens des messages précédents) :
En fait, à partir d'un grand nombre de fichier, je me suis rendu compte
qu'il vaut mieux démarrer par un find plutôt que tout autre commande.
Par exemple, lorsque le nombre de fichiers dépasse la centaine de mille
un:
ls | wc -l
ne rend jamais la main, alors qu'un
find . -type f | wc -l
est quasi immédiat
On récapitule: - trouver les fichiers dont le contenu match <pattern> - à partir du nom du fichier, en déduire un autre - supprimer les deux fichiers
find directory -type f -print | xargs grep -l pattern | sed 's/qf(.*)/& df1 Df1' | xargs rm -f
D'accord, j'ajouterai un: find directory -type f -name "qf*" -print pour épurer un peu, mais j'ai du mal à comprendre le sed
A partir du qfxxxxx ca cree qfxxxxx dfxxxxx Dfxxxxx poyr tout détruire
Qu'on peut simplifier (si le grep accepte la recursivité ce qui n'est pas gagné si je me souviens des messages précédents) :
En fait, à partir d'un grand nombre de fichier, je me suis rendu compte qu'il vaut mieux démarrer par un find plutôt que tout autre commande. Par exemple, lorsque le nombre de fichiers dépasse la centaine de mille un: ls | wc -l ne rend jamais la main, alors qu'un find . -type f | wc -l est quasi immédiat
Normal ls fait des tris...
Freddy DISSAUX
Le 11 Nov 2008 14:52:58 GMT, Kevin écrivait:
Le 08-11-2008, Freddy DISSAUX a écrit :
On récapitule: - trouver les fichiers dont le contenu match <pattern> - à partir du nom du fichier, en déduire un autre - supprimer les deux fichiers
Oui
Toujours *bien* comprendre le problème avant de faire quoi que ce soit :)
Un début de réponse:
#!/usr/bin/perl
Hélas, pas de perl sur ma plateforme.
Un *nix avec sendmail mais pas de perl ? FreeBSD ?
-- freddy <point> dsx <arobase> free <point> fr
Le 11 Nov 2008 14:52:58 GMT, Kevin écrivait:
Le 08-11-2008, Freddy DISSAUX <freddy_point_dsx@free_point_fr.invalid> a écrit :
On récapitule:
- trouver les fichiers dont le contenu match <pattern>
- à partir du nom du fichier, en déduire un autre
- supprimer les deux fichiers
Oui
Toujours *bien* comprendre le problème avant de faire quoi que ce soit
:)
Un début de réponse:
#!/usr/bin/perl
Hélas, pas de perl sur ma plateforme.
Un *nix avec sendmail mais pas de perl ? FreeBSD ?