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.
Quel est le moyen le plus simple de supprimer tous ces fichiers?
Semblable à la réponse exec, mais ne nécessite pas de processus pour chaque fichier trouvé:
find . -size +100k -delete
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 \;
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