2017-07-19 4 views
0

J'essaye d'écrire un script pour supprimer le plus petit fichier si à l'intérieur du dossier a plus d'un fichier inférieur à 10 Mo, mais je n'ai pas réussi.Script shell pour supprimer les fichiers plus petits que xMB avec la condition

Dans ma tentative

find . -type f -size -10M -exec rm {} +

Supprimer tous les moins de 10 Mb, je dois enlever seulement le plus petit si à l'intérieur du dossier ont 2 fichiers plus petits que 10MB récursive.

Tout le monde peut m'aider?

Répondre

0

Une option est en boucle par la sortie de find puis garder une trace de puis le nombre de fichiers et de garder une trace du fichier plus petit, donc à la fin vous pouvez le supprimer:

#!/bin/bash 

path=/path/to/dir # replace here with your path 

while read -d '' -r dir;do 

    files_count=0 
    unset min 
    unset smallest_file 

    while read -d '' -r file;do 

      let files_count++ 
      min_size="$(du -b "${file}"|cut -f1)" 
      min=${min:-"$min_size"} 
      smallest_file=${smallest_file:-"$file"} 

      if ((min_size < min));then 
        min=$min_size 
        smallest_file=$file 
      fi 

    done < <(find "${dir}" -type f -size -10M -maxdepth 1 -print0) 

    if ((files_count >= 2));then 

      echo "$smallest_file" 
      #rm -v "$smallest_file" 

    fi 

done < <(find "${path}" -type d -print0) 
+0

Alors, don » t travail ici: 'trouver: 'plus petit': Aucun fichier ou répertoire' D'après ce que je comprends, il enlèvera le plus petit de tous. Mais je dois supprimer seulement le plus petit du dossier s'il y a> = 2 dossiers avec la taille sous 10MB dans ce dossier. –

+0

@YagoLima Désolé, c'était mon répertoire de test, remplacez par votre chemin de répertoire, j'ai édité le code. – archemiro

+0

Mon mauvais, déjà changé ici. Mais, comme je l'ai dit, il ne montre que le plus petit d'entre eux. J'ai besoin du plus petit fichier dans le dossier si dans ce dossier il y a> = 2 fichiers de moins de 10 Mo. –