Bonjour,
J'ai un repertoire avec des dossiers et des fichiers avec des espaces.
je veux faire un script qui va me verifier si mon repertoire est pas trop grand (si c'est le cas il me supprime les fichier els plus anciens jusqu'a revenir a une taille acceptable.
Pour cela j'ai fais ca :
Je n'ai rien trouvé de mieux pour em sortir une liste des fichiers du plus anciens au plus vieux que de faire un find -atime +0. J'ai essayé avec un ls -lRt mais apres pour le traitement ca ne m'allait pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 if [ `du -sk $dir_tocheck|awk '{print $1}'` -gt $max_size ] then echo "La taille de la corbeille dépasse le quota autorisé ($max_size Ko)" find $dir_tocheck -atime +0 > file.temp sed -e 's/ /\\ /g' file.temp > file.ok while read files do echo "Suppresion de $files" rm -rf $files if [ `du -sk $dir_tocheck|awk '{print $1}'` -gt $max_size ] then continue else echo "Corbeille propre (`du -sm $dir_tocheck|awk '{print $1}'` Mo)" exit 0 fi done < file.ok rm file.ok rm file.temp
J'ai commencé par faire un for file in `find monfichier -atime +0`, mais étant doné qu'il y a des espace dans mes nom de repertoires, mon for coupait les noms de repertoires par mot.
C'est pourquoi je suis passé par un find + un sed, comme ca je peux supprimer mes fichiers a partir de ce que ma sortie mon sed avec un \ devant mes espaces.
Problèmes: Si je regarde mon file.ok, j'ai bien un chemin comme je veux par contre si je fais un while et un read, il me fait sauter mes \ donc quand je vais un rm de $ligne mon rm ne marche pas car il met en le chemin sans les \ :
Est ce que quelqun sait comme me sortir de ces problèmes de caractères?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 /distant/julienb/script/cron/test1/un\ espace/deux\ espaces/a /distant/julienb/script/cron/test1/un\ espace/deux\ espaces/s /distant/julienb/script/cron/test1/un\ espace/deux\ espaces/i /distant/julienb/script/cron/test1/un\ espace/deux\ espaces/r julienb@julien:~/script/cron$ while read ligne;do echo $ligne ;done < file.ok /distant/julienb/script/cron/test1/un espace/deux espaces/a /distant/julienb/script/cron/test1/un espace/deux espaces/s
Merci!!
Partager