Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/07/2018, à 13: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, à 15:41)

Hors ligne

#2 Le 28/07/2018, à 14: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, à 15:08)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 28/07/2018, à 14: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

Hors ligne

#4 Le 28/07/2018, à 15: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, à 09: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, à 09:57

gigiair

Re : [résolu] script pour effacer des fichiers

DonutMan75 a écrit :

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, à 11: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>
smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 29/07/2018, à 12: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, à 13:14

lynn

Re : [résolu] script pour effacer des fichiers

pingouinux a écrit :

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

Hors ligne

#10 Le 29/07/2018, à 14:01

pingouinux

Re : [résolu] script pour effacer des fichiers

lynn #9 a écrit :

Ç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, à 14:17

lynn

Re : [résolu] script pour effacer des fichiers

Ok. Merci Pingouinux. Une bonne occasion de lire le man sur ce point. smile


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#12 Le 29/07/2018, à 15: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, à 15: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