suppresion de dossier/fichier datant plus de 30 jours [Résolu][shell] - Shell/Batch - Programmation
Marsh Posté le 13-03-2009 à 15:08:40
Donc c'est de l'Unix !
Alors cela peut se faire en une seule ligne :
find Home -name "*" -type f -mtime +30 -exec rm -f {} \; |
Pour tester, lister les fichiers au lieu de les supprimer, avec la ligne suivante :
find Home -name "*" -type f -mtime +30 -exec ls -l {} \; |
Marsh Posté le 13-03-2009 à 15:56:00
Oui c'est de l'Unix, désolé de ne pas l'avoir précisé.
Sinon ta commande me liste tous les fichiers qui se trouvent dans home et ses sous dossiers mais moi je voudrais juste ceux qui se trouvent dans ses sous dossiers (ainsi que les dossiers des sous dossiers...)
Merci d'avance
Marsh Posté le 13-03-2009 à 19:53:08
Voila un screen qui peut peut etre mieux expliqué ce que j'ai fais.
http://img9.imageshack.us/img9/7888/scriptc.jpg
Et on voit la derniere ligne qu'il efface "script4" donc les fichiers a la racine de home
C'est pour ca que je voudrais que mon deuxième script fasse sa recherche dans le premier script et ensuite supprime les fichiers et sous dossiers
Quelqu'un peut m'aider s'il vous plait ?
Merci
Marsh Posté le 14-03-2009 à 03:08:06
man ksh (ou man bash, ou man csh, bref man <le shell que tu utilises> )
Et man test aussi.
Méthode à employer : parcours de tous les fichiers de ton répertoire, et si c'est un sous-répertoire, alors find dessus :
for i in Home/*; do [ -d $i ] && find $i -type f -mtime +30 -exec rm -f {} \; ;done |
Marsh Posté le 16-03-2009 à 15:57:17
Ca ne fait pas ce que je voudrais.
Je voudrais que ma seconde recherche (fichier et dossiers supérieurs a 30 jours) se fasse a partir de ma premiere recherche (recherche des dossiers dans le dossier home).
En gros je veux supprimer les fichiers et sous dossiers qui se trouvent dans les dossiers "client X" si ils datent de plus de 30 jours.
ps: je suis débutant en unix (ou bash)
Merci
Marsh Posté le 16-03-2009 à 16:12:27
a oui parfait j'avais mis au mauvais endroit mon script.
Ensuite je voudrais supprimer les dossiers vides qui se trouvent dans client X (sans supprimer les dossiers client X). Comment puis je le rajouter dans le script stp ?
Puis a quoi sert le -d ? c'est pour faire une recherche sur les dossiers ?
Merci beaucoup
Marsh Posté le 16-03-2009 à 16:40:44
J'ai reussi pour la suppresion des dossiers vides .
Sinon je voudrais bien que tu m'expliques stp le "do [ -d $i ]".
J'essaye de faire une extraction dans un fichier log et ensuite je mets ce que j'ai fait.
Merci en tout cas
Marsh Posté le 16-03-2009 à 16:48:11
Ha non en faite j'ai refais une boucle comme ceci :
Code :
|
Mais il faudrait qu'il répète ceci jusqu'à qu'il n'y a plus de dossiers vide. Mais il le fait qu'une seule fois (donc si il y a un dossier A vide dans un autre dossier B, il supprime le premier dossier A mais pas ensuite le B).
Pour faire ceci, dois je utiliser un while ?
Merci
Marsh Posté le 19-03-2009 à 17:10:48
Bonjour,
Suite a mon script avec plusieurs opération (suppresion de fichiers datant de plus de 30 jours dans des dossiers et suppressions des dossiers vides ensuite).
Je voudrais faire des log de ces opérations (qui seront faites une fois par jour) avec comme nom de fichier la date du jour. Voici le script :
Code :
|
Donc est ce que c'est possible de changer mon log_fichier.txt et log_dossier.txt par un %date%.log dans ce format "AAAA/MM/JJ" par exemple s'il vous plait ?
Merci d'avance
Cédric
Marsh Posté le 19-03-2009 à 17:34:50
man date j'ai deja cherché toute l'aprem , je ne trouve pas la commande qui permet de nommer un fichier par rapport a la date du jour a partir d'une extraction d'un contenu dans un fichier.
et sinon j'y ai pensé au renommage mais je devrais le faire en deux temps et en faite je voudrais pas le renommé mais juste le nommé date.log au lieu de log_fichier.txt
Marsh Posté le 19-03-2009 à 17:40:15
Ben tu calcules d'abord la date dans une variable, puis tu fais un mv sur le fichier en utilisant ta variable pour le nouveau nom.
Marsh Posté le 19-03-2009 à 17:51:43
comme ceci ?
http://www.developpez.net/forums/d [...] date-jour/
Marsh Posté le 20-03-2009 à 11:14:55
C'est bon j'ai reussi, merci Elmoricq !
Voila le script final :
Code :
|
Juste une dernière petite chose, est ce que c'est possible d'enlever dans mes fichiers log le \ s'il vous plait, quand le nom du fichier a un espace, voici mon fichier log (sur un test) :
573014 8 -rw-r--r-- 1 root root 203 mar 13 05:29 home/client/script4
573015 8 -rw-r--r-- 1 root root 2423 fév 25 11:11 home/client/README
573008 8 -rw-r--r-- 1 root root 629 fév 25 11:11 home/client\ 1/IDELicense(2).txt
573010 8 -rw-r--r-- 1 root root 629 fév 25 11:11 home/client\ 1/X/IDELicense(2).txt
573012 4 -rw------- 1 root root 0 mar 11 05:51 home/client\ 1/pierre\ dupont
573013 8 -rw-r--r-- 1 root root 629 fév 25 11:11 home/client\ 1/IDELicense.txt
573000 8 -rw-r--r-- 1 root root 2423 fév 25 11:11 home/client\ 2/README
573002 8 -rw-r--r-- 1 root root 1373 fév 25 11:11 home/client\ 2/VM
Merci d'avance
Marsh Posté le 20-03-2009 à 16:12:03
Ce n'est pas possible ce que je voudrais faire ? (sachant que les noms des dossiers "client X" sont des noms différents...)
Marsh Posté le 20-03-2009 à 19:09:37
cedric00 a écrit : Ce n'est pas possible ce que je voudrais faire ? (sachant que les noms des dossiers "client X" sont des noms différents...) |
Si tu veux renommer tes fichiers avec "\", voici une boucle de traitement
Code :
|
J'ai tapé ça vite fait sans tester. J'ai un petit doute sur les "\\" du sed car je crains qu'il faille surprotéger chaque "\" à cause des backquottes. Si ça marche pas, remplace "s/\\//g" par "s/\\\\//g"
Si tu veux juste supprimer le "\" dans le fichier log, alors 2 commandes
Code :
|
Marsh Posté le 13-03-2009 à 14:13:04
Bonjour,
Mon but est de supprimer les dossiers et fichiers qui se trouvent dans des dossiers datant plus de 30 jours. Voici son arborescence :
Home ->client 1
->client 2
->...
Donc je veux supprimer tous les fichiers et dossiers qui se trouvent dans client 1, client 2 etc ... (sans supprimer les dossiers client 1, etc et les fichiers a la racine de home).
Voici mon code :
Et donc mon problème est le script2 ne va pas chercher dans les dossiers client etc (par rapport au script1), il va chercher a la racine de home (là ou le script est placé).
Comment mon script2 pourrait faire sa recherche a partir du script1 s'il vous plait ?
Merci,
Message édité par cedric00 le 25-03-2009 à 15:28:02