web-dev-qa-db-fra.com

Comment obtenir et supprimer tous les fichiers dépassant une certaine taille

  1. Je cherche une commande linux pour obtenir tous les fichiers dépassant une certaine taille à partir du répertoire actuel et de ses sous-répertoires.

  2. Quel est le moyen le plus simple de supprimer tous ces fichiers?

22
Ran

Semblable à la réponse exec, mais ne nécessite pas de processus pour chaque fichier trouvé:

find . -size +100k -delete
55
Erik

Bon mot:

find . -size +100k -exec rm {} \;

La première partie (find . -size +100k) recherche tous les fichiers commençant par le répertoire courant (.) dépassant (+) 100 Ko (100k).

La deuxième partie (-exec rm {} \;) invoquait une commande donnée pour chaque fichier trouvé. {} est un espace réservé pour le nom de fichier actuel, y compris le chemin. \; marque simplement la fin de la commande.

N'oubliez pas de toujours vérifier si vos critères de filtrage sont corrects en exécutant raw find:

find . -size +100k

Ou, vous pouvez même faire une copie de sauvegarde avant de supprimer:

find . -size +100k -exec cp --parents {} ~/backup \;
14
Tomasz Nurkiewicz

En zsh :

ls -l *(Lk+100)   # list file size greater than 100kb

alors:

rm *(Lk+100)

Plus de bonté zsh ici .

1
Brian Agnew

python est installé sur tous les systèmes d'exploitation Unix, alors pourquoi ne pas l'utiliser à la place de bash?

Je trouve toujours le python plus lisible que la magie awk et sed.

C'est le code python que j'aurais écrit:

import os
Kb = 1024 # Kilo byte is 1024 bytes
Mb = kb*kb
Gb = kb*kb*kb
for f in os.listdir("."):
    if os.stat(f).st_size>100*Kb:
        os.remove(f)

Et ceci est la version one-liner avec python -c

python -c "import os; [os.remove(f) for f  in os.listdir('.') if os.stat(f).st_size>100*1024]"

Et si vous souhaitez appliquer la recherche de manière récursive, consultez this

0
Uri Goren