#1 Le 28/07/2018, à 12:04
- thpo
[résolu] script pour effacer des fichiers
Bonjour,
J'essaye de réaliser un script qui lit le contenu d'un dossier et qui supprime les fichiers qui sont plus petit qu'une certaine taille, par exemple 1Mo.
Mon idée est de lire le dossier avec ls et de mettre le contenu dans une variable ou un fichier.
Ensuite, ça se complique, je voudrais tester la condition de la taille du fichier et enfin au choix, ne rien faire ou supprimer le fichier.
Voici mon début de code, je ne sais pas comment faire le test de la taille.
#!/bin/bash
# utilisation de la variable liste pour mettre le liste des nom de fichier
liste= "ls img/"
taille_max = 1000
# affichage de cette liste pour vérification
echo -e "ma liste :\n $liste\n"
# lecture de la liste et vérification de la taille
if [ test ]
then
echo "c'est vrai"
rm $nom_fichier
fi
Comment vérifier la taille d'un fichier ? en utilisant la taille que donne ls -l ?
Est-ce que quelqu'un aurait quelques pistes pour m'aider à avancer ? Avis ou conseils ?
Merci par avance
Dernière modification par thpo (Le 29/07/2018, à 14:41)
Hors ligne
#2 Le 28/07/2018, à 13:18
- Watael
Re : [résolu] script pour effacer des fichiers
salut,
à aucun moment tu ne parcours la liste !
l'utilisation de ls dans les scripts est fortement déconseillée.
utilise plutôt les globs et stat :
for f in img/*; do test $(stat -c %s "$f") -eq 1000 && echo "taille $f = 1000" || echo "taille $f != 1000 ! "; done
cf. help test
Dernière modification par Watael (Le 28/07/2018, à 14:08)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 28/07/2018, à 13:47
- lynn
Re : [résolu] script pour effacer des fichiers
Bonjour,
Il manque un " avant le deuxième mot taille.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#4 Le 28/07/2018, à 14:09
- Watael
Re : [résolu] script pour effacer des fichiers
corrigé.
merci.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 29/07/2018, à 08:38
- DonutMan75
Re : [résolu] script pour effacer des fichiers
Hello,
on peut également passer par find. Je propose (pas testé car pas sous Linux actuellement) :
find ./img/ -size -1m -exec echo "{} est un petit fichier" \;
Bon dimanche à tous,
Donut
Hors ligne
#6 Le 29/07/2018, à 08:57
- gigiair
Re : [résolu] script pour effacer des fichiers
Hello,
on peut également passer par find. Je propose (pas testé car pas sous Linux actuellement) :find ./img/ -size -1m -exec echo "{} est un petit fichier" \;
UnxUtils est ton ami.
Le problème est que la commande find peut exister sur ton système avec un tout autre sens. Il faut alors préciser la commande find que l'on veut exécuter, en citant le chemin complet, ou en la renommant.
--
JJR.
Hors ligne
#7 Le 29/07/2018, à 10:37
- Watael
Re : [résolu] script pour effacer des fichiers
<mauvaise foi>
mais ce n'est pas un script, ce n'est qu'une commande !
</mauvaise foi>
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 29/07/2018, à 11:56
- pingouinux
Re : [résolu] script pour effacer des fichiers
Bonjour,
Les tests sur la taille des fichiers avec find sont un peu piégeants.
Pour lister tous les fichiers de taille inférieure ou égale à 1 Mo (1048576 bytes) :
find ./img -type f -size -2M
Pour obtenir les fichiers de taille strictement inférieure à 1 Mo :
find ./img -type f -size -1048576c
Si tu veux te limiter au répertoire de départ (sans parcourir toute l'arborescence), et supprimer les fichiers répondant au critère :
find ./img -maxdepth 1 -type f -size -1048576c -delete
Hors ligne
#9 Le 29/07/2018, à 12:14
- lynn
Re : [résolu] script pour effacer des fichiers
Pour lister tous les fichiers de taille inférieure ou égale à 1 Mo (1048576 bytes)
find ./img -type f -size -2M
Ça ne devrait pas être -1M dans ce cas?
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#10 Le 29/07/2018, à 13:01
- pingouinux
Re : [résolu] script pour effacer des fichiers
Ça ne devrait pas être -1M dans ce cas?
Non, car find considère que 1M correspond aux fichiers de taille supérieure à 0 et inférieure ou égale à 1M.
-1M listera les fichiers de taille nulle.
Pour choisir une taille précise, il vaut mieus utiliser le suffixe c (byte) plutôt que M.
Hors ligne
#11 Le 29/07/2018, à 13:17
- lynn
Re : [résolu] script pour effacer des fichiers
Ok. Merci Pingouinux. Une bonne occasion de lire le man sur ce point.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#12 Le 29/07/2018, à 14:39
- thpo
Re : [résolu] script pour effacer des fichiers
Merci pour vos réponses, je ne savais pas que l'on pouvait effacer avec la commande find, c'est bon à savoir.
Mon est script ci-dessous, finalement, j'ai décidé de marquer les fichiers et pas de les effacer tout de suite.
Les difficultés que j'ai rencontrées sont :
- trouver "back quote", maintenant je sais altgr+7
- je n'ai pas réussi a écrire le préfixe, mais j'ai pu mettre un suffixe... car la variable commence par img/ et pas par le nom du fichier lui-même... Il faudrait que je revoie cela.
#!/bin/bash
taille_max=720000
message=`pwd`
echo "vous êtes dans le dossier $message"
for f in img/*
do
taille=`stat -c %s "$f"`
echo -e "taille fichier $f : $taille octets\n"
if [ $taille -gt $taille_max ]
then
echo "grand"
else
echo "trop petit : à effacer"
# je marque le fichier avec un préfixe "a_effacer"
f_a_effacer=$f."a_effacer"
mv $f $f_a_effacer
fi
done
Hors ligne
#13 Le 29/07/2018, à 14:52
- pingouinux
Re : [résolu] script pour effacer des fichiers
find ./img -maxdepth 1 -type f -size -720001c -print -exec mv {} {}.a_effacer \;
Hors ligne