Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/06/2012, à 18:46

lux.gestator

[Résolu] Utilisation de find en excluant un répertoire

Bonjour,

J'aimerais lister le contenu d'un répertoire (et de ses sous-répertoires), avec le nouveautés du mois et sortir le résultat dans un fichier texte, jusque là, pas de souci

find /path -mtime -30 > test.txt

Là ou ça se corse, c'est que je veux exclure de la recherche le répertoire .@__thumb qui se trouve dans plusieurs de mes sous-répertoires.

Je sèche, j'ai déjà pas mal regardé sur internet, et trouvé pas mal de trucs, mais rien ne fonctionne, ou c'est moi qui ne suis pas foutu de les adapter à mes besoins...

Si une bonne âme pouvait m'indiquer la marche à suivre, je lui en serait éternellement reconnaissant

Merci d'avance

Dernière modification par lux.gestator (Le 06/06/2012, à 19:45)

Hors ligne

#2 Le 06/06/2012, à 19:05

serged

Re : [Résolu] Utilisation de find en excluant un répertoire

(pas testé) d'après le man :

find /chemin -prune ".@__thumb" -mtime -30

Mais pas très bien compris ce passage du man (que viennent faire ces "vrai" et "faux" ?) :

man find a écrit :

-prune Vrai ;  Si  le  fichier  est un répertoire, ne pas le parcourir. Si l'option -depth est utilisée : faux, aucun effet. Puisque -delete entraîne -depth, vous  ne  pouvez  pas  utiliser  conjointement  -prune  et  -delete.

Et la consultation du man en anglais ne pas éclairé non plus....

Mais ça doit le faire...


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#3 Le 06/06/2012, à 19:16

lux.gestator

Re : [Résolu] Utilisation de find en excluant un répertoire

Je pensais aussi, mais ça ne fonctionne pas...

Hors ligne

#4 Le 06/06/2012, à 19:21

dev/random

Re : [Résolu] Utilisation de find en excluant un répertoire

En 2 commandes (je sais pas si find tout seul peut le faire):

find /path -mtime -30 |
fgrep -v .@__thumb > test.txt

...


667, the neighbour of the beast..

Hors ligne

#5 Le 06/06/2012, à 19:45

lux.gestator

Re : [Résolu] Utilisation de find en excluant un répertoire

Yep, ça fonctionne

Merci beaucoup

Hors ligne

#6 Le 06/06/2012, à 23:21

Postmortem

Re : [Résolu] Utilisation de find en excluant un répertoire

Salut,
find peut le faire seul :

find /path -type d -name '.@__thumb' -prune -o -mtime -30 -print

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 06/06/2012, à 23:52

dev/random

Re : [Résolu] Utilisation de find en excluant un répertoire

HuH, mais t'as plus les fichiers, dans ce cas-là, si ?..



__________________
TRASH PUUUUUNK!!!


667, the neighbour of the beast..

Hors ligne

#8 Le 07/06/2012, à 01:34

Postmortem

Re : [Résolu] Utilisation de find en excluant un répertoire

Si si, tout sauf leS répertoireS se nommant .@__thumb et leur contenu.

Edit :
Pour préciser, ça te paraîtra peut-être plus clair avec les parenthèses :

find /path \( -type d -name '.@__thumb' -prune \) -o \( -mtime -30 -print \)

Dernière modification par Postmortem (Le 07/06/2012, à 01:38)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#9 Le 07/06/2012, à 07:53

serged

Re : [Résolu] Utilisation de find en excluant un répertoire

Postmortem a écrit :

Si si, tout sauf leS répertoireS se nommant .@__thumb et leur contenu.

Edit :
Pour préciser, ça te paraîtra peut-être plus clair avec les parenthèses :

find /path \( -type d -name '.@__thumb' -prune \) -o \( -mtime -30 -print \)

Il faut dire que le man sur cette option -prune est tout sauf clair...


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#10 Le 07/06/2012, à 11:14

Postmortem

Re : [Résolu] Utilisation de find en excluant un répertoire

serged a écrit :

Il faut dire que le man sur cette option -prune est tout sauf clair...

C'est clair !! Euh... Enfin non, c'est pas clair justement ! J'avais trouvé un site qui expliquait bien le fonctionnement de find mais j'arrive pas à remettre la souris dessus.
Vais tenter une 'tite explication, peut-être que ça pourra t'éclairer.

En fait, ce qu'il est important de comprendre c'est comment fonctionne find et comment il applique ses tests.

find va scanner TOUS LES répertoires/fichiers un par un à partir du chemin (/path dans notre cas) et y appliquer les tests/actions dans l'ordre où ils apparaissent sur la ligne de commande.

Pour chaque répertoire/fichier que find va trouver à partir de /path, il va appliquer l'expression :

\( -type d -name '.@__thumb' -prune \) -o \( -mtime -30 -print \)

Pour que cette expression soit vraie, il faut que la 1ère partie ( \( -type d -name '.@__thumb' -prune \) ) soit vraie OU que la 2ème partie ( \( -mtime -30 -print \) ) soit vraie.

Si la 1ère partie est vraie, toute l'expression est vraie, et find n'a donc pas besoin de passer dans la 2ème partie (et il ne le fait pas ! ).
Dans notre cas, la 1ère partie est vraie seulement pour les répertoires se nommant .@__thumb. Pour ces répertoires, find ne va pas scanner leur contenu grâce au -prune. De plus, la 2ème partie n'est pas exécutée, on ne vérifie donc pas si le répertoire a été modifié (-mtime -30) et on ne l'affiche pas (-print)

Pour tous les autres répertoires, ainsi que pour tous les fichiers, la 1ère partie est fausse, find passe donc dans la 2ème partie. Si le fichier ou le répertoire en cours a été modifié il y a moins de 30 jours, -mtime -30 est vrai et donc le fichier ou le répertoire est affiché grâce au -print.

De plus, ici, les \( et \) ne sont pas obligatoires car la juxtaposition de tests/actions est prioritaire sur le -o


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne