Scanner fichiers et supprimer si supérieurs à xxx Mo - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 14-02-2006 à 16:37:06
Pour ton premier problème :  
find couplé avec une boucle for puis rm 
Pour le second : 
si c'est une ligne particulière type : "<? echo toto ?>" 
alors utilise grep <chaine spécifique> , si grep ne retourne rien -> suppression du fichier. 
 
Marsh Posté le 14-02-2006 à 16:47:12
je n'ai trouvé que -atime et -name comme attribut find :s 
pour grep ca a l'air plus facile il n'a que ca comme fonction 
 
aussi comment faire pour supprimer le fichier si il a cette fonction ? 
j'ai trouvé la commande, rm, mais comment faire dans ce cas ? 
il y a un système de If "" > "" ? 
 
 
et finalement, comment mettre en place ces commandes ? dans un ficheir bash c'est ca ? (j'en ai entendu parlé rbièvement)
Marsh Posté le 14-02-2006 à 16:54:13
| Citation : je n'ai trouvé que -atime et -name comme attribut find :s  | 
 
tu as mal cherché -> "man find" puis regarde l'option -size  
| Citation : dans un ficheir bash c'est ca ? | 
 
Oui
Marsh Posté le 14-02-2006 à 16:56:15
find /home -type f -size -2k -exec rm "{}" \; 
(supprime les fichiers de taille inférieure à 2 ko, +2k pour taille supérieure à 2ko et 2k pour taille strictement égale à 2ko) 
 
pour le second : grep -e "ton expression" -L -r -s /home | xargs rm 
(ça ne marche que si ton expression est contenue dans une ligne)
Marsh Posté le 14-02-2006 à 17:05:22
Apres ptite recherche sur bash apparemment i lfaut simplement le faire commencer par #!/bin/bash ? 
 
donc, pour Taille supérieure a 1Mo : 
 
#!/bin/bash 
find /home -type f -size +1M -exec rm "{}" \; 
grep -e "ton expression" -L -r -s /home | xargs rm 
 
Mais peut on spécifier le nom des fichiers à scanner par grep ? en l occurence ce ne sont que des fichiers type 1nom.htm 1nom.html etc etc 
 
 
 
Est ce que je peux etre un petit peu féniant et vous demander qques explications ?  
  
 
par exemple que veux dire "-type f"   
et a quoi sert \; ? \pour arreter la suppression et ; pour passer a la ligne suivante ? 
et -L -r ? et finalement pourquoi un "exec" et un "xargs" ? il y a un truc diff comme cela pour chaque commande ?  
Marsh Posté le 14-02-2006 à 17:11:47
| Citation : par exemple que veux dire "-type f" | 
 
"man find" 
|  -type c  | 
 
même chose pour -exec (partie action) 
 
pour xargs -> man xargs
Marsh Posté le 14-02-2006 à 17:13:50
Dak merci je n'ai pas encore le réflexe de MAN dont tout le monde aprle pourtant 
 
par contre ce qui membete c'est pour scanner les ficheirs portant un certain nom 
Marsh Posté le 14-02-2006 à 17:16:38
| Citation : par contre ce qui membete c'est pour scanner les ficheirs portant un certain nom  | 
 
Pourquoi, la ligne de commande ne te convient pas ? tu aurais un exemple ?
Marsh Posté le 14-02-2006 à 17:20:56
Oui par exemple si il scanne un fichier truc.php ne comportant pas l'expression voulue, il va le supprimer,  
alors que je voudrais qu'il ne fasse ca que pour les fichiers portant certains nom : 1certainnom.htm, 1certainnom.html, 1certainnom.php ...
Marsh Posté le 14-02-2006 à 17:23:25
je crois avoir trouvé file --file=FICHIER dans le man 
 
 
       -f FICHIER, --file=FICHIER 
              Lire les motifs dans le FICHIER indiqué, un motif par ligne.  Un 
              fichier  vide ne contient aucun motif, si bien qu'aucune concor- 
              dance n'est trouvée. 
 
Pouvez vous confirmer ? comment séparer les diff noms de ficheirs a scanner ?
Marsh Posté le 14-02-2006 à 18:52:47
Ca fera un truc du genre 
 
#!/bin/bash 
find /home -type f -size +1M -exec rm "{}" \; 
find /home -type f -name 1nom.htm 1nom.html -exec grep -e "ton expression" -L -r -s /home | xargs rm 
 
?
Marsh Posté le 14-02-2006 à 19:01:43
| Citation : -name 1nom.htm 1nom.html | 
 
attention c'est un motif à mettre : 
ex: -name "*.php"
Marsh Posté le 14-02-2006 à 19:34:08
Donc : 
 
#!/bin/bash 
find /home -type f -size +1M -exec rm "{}" \; 
find /home -type f -name "1nom.htm 1nom.html" -exec grep -e "ton expression" -L -r -s /home | xargs rm  
 
? 
Et l'éxec se fait sous cette syntaxe ?
Marsh Posté le 14-02-2006 à 20:52:17
le 2ème non : 
-exec grep -e "ton expression" 
peut être que ça devrait mieux marcher : 
-exec grep -e "ton expression" -L -r -s "{}" | xargs rm\; 
 
sinon le motif "1nom.htm 1nom.html" est incorrect 
regarde les exemples de motif donnés dans "man find"
Marsh Posté le 14-02-2006 à 21:24:19
Comprends rien aux motifs :s 
 
       -name motif 
              Fichier  dont  le  nom  de  base (sans les répertoires du chemin 
              d'accès), correspond au motif  du  shell.   Les  méta-caractères 
              (`*', `?', et `[]') ne sont jamais mis en correspondance avec un 
              point `.'  au début du nom.  Pour ignorer un  répertoire,  ainsi 
              que  tous  ses sous-répertoires, utiliser l'option -prune ; vous 
              trouverez un exemple dans la description de l'option -path. 
Marsh Posté le 14-02-2006 à 21:32:58
dans le man : 
|  Par exemple, pour mettre en correspondance  | 
 
Dans ton cas, tu veux les fichiers 1nom.html et 1nom.htm 
le motif sera : "1nom.htm*" 
Marsh Posté le 14-02-2006 à 21:59:14
| Citation : find: Type invalide pour l'option -size `M'  | 
 
 
> donc j'ai remplacé par 1000K, ca marchait pas, donc par 1000000, plus de message d'erreur mais ca ne marchait toujours pas 
 
j'ai donc remplacé /home par /home/*, 
> marche toujours pas
Marsh Posté le 14-02-2006 à 22:01:07
par contre, il faudra adapter grep de exec, car la commande 'grep -e "ton expression" -L -r -s /home' va examiner tous les fichier du répertoire /home 
Donc si le fichier ne contient pas "maligne" -> on le supprime 
| test -z "`grep -e "maligne" "{}"`" && rm "{}" | 
 
à tester, peut être y aura t-il des problèmes de quote. Dans tous les cas n'execute pas de rm "{}" mais in echo "{}" pour être sûr que le script fonctionne. 
 
Marsh Posté le 14-02-2006 à 22:07:03
cela donne 
| Citation : grep: {}: Aucun fichier ou répertoire de ce type  | 
 
 
En fait je ne suis pas trop sûr de ce que je devais faire avce ca   
  
je l'ai simplement mis dans un .sh exécutable, c'est bien cela a quoi le bout de code servait ?
Marsh Posté le 14-02-2006 à 22:10:40
essaye comme ceci (à ajouter dans le find): 
| -exec test -z "`grep -e "ton expression" "{}"`" && rm "{}" | 
 
ou 
| -exec [ -z "`grep -e "ton expression" "{}"`" ] && rm "{}" | 
Marsh Posté le 14-02-2006 à 22:18:16
Alors je met précisément cela donne pour chaque script sinon on va s'embrouiller : 
 
| Citation : #!/bin/bash  | 
 
 
donne 
 
| Citation : grep: {}: Aucun fichier ou répertoire de ce type  | 
 
 
 
------------------ 
 
| Citation : #!/bin/bash  | 
 
 
donne 
 
| Citation : grep: {}: Aucun fichier ou répertoire de ce type  | 
 
 
------- 
 
sans oublier que j'ai viré le emsasge d'erreur pour la taille mais cela ne supprime rien  
 
pour faire mes test : 
j'ai créé un fichier /home/henri/index.php avec comme contenu test 
un fichier /home/henri/jesaisplusquoi.mp3 supérieur a 1Mo 
un fichier /home/henri/test/jesaisplusquoi.mp3 supérieur a 1Mo pour voir si cela amrche avec les sous répertoires
Marsh Posté le 14-02-2006 à 16:03:57
Bonjour,
Je connais simplement les commandes de base sous linux
j'aimerai faire une tache cron qui scanne tous les fichiers de /home et supprime ceux supérieurs à un certain poids
je n'ai aucune idée de quoi faire, par ou commencer etc :s
j'aimerais également faire une tâche un peu plus compliquée qui scanne le code source de fichiers web ayant un certain nom, et si ils ne comportent pas une certaine partie, ils sont également supprimés
merci beaucoup !