Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1827 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Find + printf + contenu du fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Find + printf + contenu du fichier

n°2030488
grosbin
OR die;
Posté le 19-10-2010 à 11:10:14  profilanswer
 

Bonjour, je viens à me demander quelles alternatives préférer à la fonction scandir sur de gros fichiers..
Utiliser cette fonction avec +80000 fichiers .. le simple scandir met 80sec .. et fini par planter
Merci pour vos suggestions .. je pense que passer par le shell est la meilleure option ..


Message édité par grosbin le 05-11-2010 à 12:01:46

---------------
Photos Panoramiques Montagnes Haute Savoie
mood
Publicité
Posté le 19-10-2010 à 11:10:14  profilanswer
 

n°2030494
rufo
Pas me confondre avec Lycos!
Posté le 19-10-2010 à 11:17:33  profilanswer
 

T'as 40000 fichiers dans un répertoire :??: Ton problème à résoudre serait plutôt de ce côté là... :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2030496
grosbin
OR die;
Posté le 19-10-2010 à 11:25:19  profilanswer
 

Mouaip, donc en shell

Code :
  1. find . -name "*(crit1|crit2)*" -print | xargs rm


xargs => le paramètre simple n'est pas repérable par apostrophe => quésako ?
ou parfois j'ai : opérande manquante
et je ne vois pas comment supprimer les fichiers ayant pour mtime < 20 par exemple


Message édité par grosbin le 19-10-2010 à 11:49:45

---------------
Photos Panoramiques Montagnes Haute Savoie
n°2030501
pataluc
Posté le 19-10-2010 à 11:45:02  profilanswer
 

salut,

 

avec find, regarde du coté de "-exec"...

 

genre

Code :
  1. find . -name "*(crit1|crit2)*" -mtime 20 -exec rm {} \;
 

je te conseille de faire des echo au début pour pas faire n'imp...

Message cité 1 fois
Message édité par pataluc le 19-10-2010 à 11:45:13
n°2030503
roondar
Posté le 19-10-2010 à 11:52:59  profilanswer
 

pataluc a écrit :

salut,
 
avec find, regarde du coté de "-exec"...
 
genre

Code :
  1. find . -name "*(crit1|crit2)*" -mtime 20 -exec rm {} \;


 
je te conseille de faire des echo au début pour pas faire n'imp...


 
L'option -delete est plus appropriée  :)

n°2030505
pataluc
Posté le 19-10-2010 à 11:56:04  profilanswer
 

roondar a écrit :


 
L'option -delete est plus appropriée  :)


ah ouais correct. J'avais l'habitude d'utiliser -exec pour diverses opération du coup je ne connaissais pas le -delete. :jap:

n°2030506
grosbin
OR die;
Posté le 19-10-2010 à 12:03:49  profilanswer
 

arf il n'existe pas l'inverse de mtime ??
( qui dans ton exemple renvoie les 20 derniers jours ? )
pour rendre le -name case insensitive je fais comment ?


---------------
Photos Panoramiques Montagnes Haute Savoie
n°2030510
roondar
Posté le 19-10-2010 à 12:09:31  profilanswer
 

grosbin a écrit :

arf il n'existe pas l'inverse de mtime ??
( qui dans ton exemple renvoie les 20 derniers jours ? )
pour rendre le -name case insensitive je fais comment ?


pour faire plus de 20 jours => -mtime +20
 
 -name case insensitive => -iname
 
bref, une bonne lecture de ca devrait t'aider http://pwet.fr/man/linux/commandes/find

n°2030512
grosbin
OR die;
Posté le 19-10-2010 à 12:14:29  profilanswer
 

ah super merci à vous tous :jap:
j'utilise ces fichiers pour les redirections 301 et le mtime compte le nombre de hits sur l'url => redirection
afin d'établir une liste d'occurences les plus nombreuses et accélerer leur temps de traitement

 

en somme -mtime +1 = de 1970 à - 1 day
  mtime -1 = de 1970 au 2 janvier 1970
  mtime 1 = de maintenant à -1day
peut-on exprimer cette valeur en timestamp, qui représente ici mon nb de hits ?


Message édité par grosbin le 19-10-2010 à 12:25:13

---------------
Photos Panoramiques Montagnes Haute Savoie
n°2030513
roondar
Posté le 19-10-2010 à 12:21:01  profilanswer
 

Citation :

-mtime n
    Fichier dont les données ont été modifiées il y a n*24 heures.  

mood
Publicité
Posté le 19-10-2010 à 12:21:01  profilanswer
 

n°2030525
grosbin
OR die;
Posté le 19-10-2010 à 12:52:19  profilanswer
 

Superbe j'obtiens un résultat 1000x plus rapide
Dernière question : peut-on trier le résultat de la fonction par filemtime DESC ou ASC ?


Message édité par grosbin le 19-10-2010 à 12:54:37

---------------
Photos Panoramiques Montagnes Haute Savoie
n°2030527
roondar
Posté le 19-10-2010 à 12:58:13  profilanswer
 

Pas à ma connaissance, par contre essayes avec l'option printf

n°2030529
roondar
Posté le 19-10-2010 à 13:07:29  profilanswer
 

Je suis vraiment gentil

Code :
  1. find . -type f -printf '%CD %CX %p \n'|sort -n


 
je te laisse adapter

n°2031138
grosbin
OR die;
Posté le 21-10-2010 à 14:06:29  profilanswer
 

J'ai completé la commande qui me ravit à merveille, merci à tous :jap:

Code :
  1. find . -type f -iname '*' -printf '%T@ %p %s\n'|sort -r -n


Serait-ce possible d'ajouter le contenu du fichier "file_get_contents" à la place de %s ??
et si possible mettre un filtre négatif sur le nom ( * en excluant les fichiers "médias" ?? )

Code :
  1. find . -type f -regex '.*[^(jpg|JPG|gif|db|flv)]' -printf '%T@ %p %Contents\n'|sort -r -n


Cette commande exclut les lettres finales lettres par lettres soit : j|p|g|i|f|d|b|l|v => qui n'affiche donc pas les php ( arg )

 



Message édité par grosbin le 21-10-2010 à 14:32:22

---------------
Photos Panoramiques Montagnes Haute Savoie
n°2031153
roondar
Posté le 21-10-2010 à 14:54:30  profilanswer
 

find . -type f  -regextype posix-egrep \! -iregex '.*\.(jpg|gif|bmp|png|swf|mp3|mp4|flv)$' -printf '%T@  %s\n'  -exec cat {} \;


Message édité par roondar le 21-10-2010 à 14:55:10
n°2031196
grosbin
OR die;
Posté le 21-10-2010 à 16:34:01  profilanswer
 

:sweat: :s prédicat invalide : regextype


Message édité par grosbin le 21-10-2010 à 16:34:17

---------------
Photos Panoramiques Montagnes Haute Savoie
n°2031977
gilou
Modérateur
Modzilla
Posté le 25-10-2010 à 12:20:04  profilanswer
 

Tu as sans doute un find ancien, qui ne supporte pas regextype. Ceci devrait coller, non:
find . \( -type f  ! -iregex '.*\.(jpg|gif|bmp|png|swf|mp3|mp4|flv)' \) -printf '%T@  %s\n'  -exec cat {} \;
au pire la regex est a adapter si la syntaxe ici n'est pas bonne.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2034127
grosbin
OR die;
Posté le 05-11-2010 à 10:11:30  profilanswer
 

Superbe !! merci gilou ( passe avec les backslashes )
Dernière petite question : pour y associer le sort sur le printf, avec le -exec cat {}, how to do ?

Code :
  1. find . -type f -iregex '.*\.\(txt\|ini\)$' -printf '%T@ %p\n'|sort -r -n -exec cat {} \;


 ça ne passe pas encore :s


Message édité par grosbin le 05-11-2010 à 10:12:53

---------------
Photos Panoramiques Montagnes Haute Savoie
n°2034242
gilou
Modérateur
Modzilla
Posté le 05-11-2010 à 14:22:38  profilanswer
 

Il faut peut être utiliser xargs.
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2034253
grosbin
OR die;
Posté le 05-11-2010 à 14:29:12  profilanswer
 

tu m'as super aidé, au risque d'être lourd je ne connais pas la syntaxe de xargs, me semble juste qu'il sert à tunneler une info d'un part et d'autre ..


---------------
Photos Panoramiques Montagnes Haute Savoie
n°2034255
gilou
Modérateur
Modzilla
Posté le 05-11-2010 à 14:32:49  profilanswer
 

C'était une réponse un peu bateau, car ceci:

Citation :

pour y associer le sort sur le printf, avec le -exec cat {}, how to do ?


c'est assez flou pour moi. Tu veux faire quoi exactement?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2034258
grosbin
OR die;
Posté le 05-11-2010 à 14:40:24  profilanswer
 

Code :
  1. find . -type f -iregex '.*\.\(txt\|ini\)$' -printf '%T@ %p\n'|sort -r -n -exec cat {} \;


en fait j'aimerais glisser le résultat de "-exec cat" à la suite de "%p" dans le printf

 

Mon but initial est de lister par timestamp desc deux types de fichiers, ainsi que leur contenu, pour éviter de passer par le file_get_contents de php à chaque fois
Ces fichiers me servent pour les redirections 301, erreur 404, debugging, bases de données sérialisées ( afin d'alléger la charge de mon serveur )
en passant par le shell, le temps de traitement de certaines infos, grace à tes remarques me fait gagner un temps précieux (x200) environ


Message édité par grosbin le 05-11-2010 à 14:42:31

---------------
Photos Panoramiques Montagnes Haute Savoie
n°2034264
gilou
Modérateur
Modzilla
Posté le 05-11-2010 à 14:57:31  profilanswer
 

Mais que vient faire le sort dans tout cela?
 
parce que si tu pipes avec sort, -exec n'est plus dans la portée des arguments du find.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Find + printf + contenu du fichier

 

Sujets relatifs
Existe-t-il une alternative à OBEX?I frame ou alternative
PHP scandir et accentsAlternative à tidy
[SGBD/SQL] Alternative à duplication de lignes par non-equijoin?Existe-t-il une alternative au flash pour créer des mini-jeux ?
resoudre numeriquement erf(x), et alternative a scan fOutlook 2007 et format mime multipart/alternative
Fonction recherchev alternativedemande alternative au Header("Location: ...")
Plus de sujets relatifs à : Find + printf + contenu du fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR