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 !