Comment supprimer tous les fichiers d'une taille inférieure à une certaine taille dans tous les sous-dossiers?

88

J'ai un dossier avec de nombreux sous-dossiers contenant de petits fichiers tif (moins de 160 Ko) qui ont été fusionnés dans de plus gros fichiers pdf, ainsi que de gros fichiers tif de plusieurs pages.

Je veux supprimer tous les petits fichiers tif sans supprimer les plus gros fichiers (tif ou pdf) et conserver la structure de répertoires. Comment puis-je m'y prendre sous Linux en utilisant la ligne de commande?

Faire
la source

Réponses:

155
find . -name "*.tif" -type 'f' -size -160k -delete

Exécutez la commande sans -deletevérifier au préalable que les fichiers corrects ont été trouvés.

Notez le -avant 160k. Cela 160ksignifie exactement 160 kilo-octets. -160ksignifie plus petit que 160 kilo-octets. +160ksignifie plus grand que 160 kilo-octets.

Les -type 'f'forces de la commande à agir uniquement sur les fichiers et répertoires sauter. cela éviterait les erreurs si le chemin contient des dossiers avec des noms correspondant au modèle *.tif.

Si vous souhaitez filtrer la taille en octets (comme dans 160 octets au lieu de 160 kilo - octets) , alors vous devez l' écrire comme ceci: 160c. Si vous écrivez simplement, 160cela sera interprété comme 160 * 512 octets. C'est une exigence étrange de la part de POSIX. Lisez ici pour plus de détails: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unize-512-bytes

lesmana
la source
La page de manuel ubuntu semble le mentionner. Juste en dessous de la section "TESTS": Les arguments numériques peuvent être spécifiés avec + n pour plus grand que n, -n pour moins que n, n pour exactement n.
JDG
1
Merci. Il ne m'est pas venu à l'esprit que les informations pourraient se trouver ailleurs dans la page de manuel.
Lesmana
Il est bien que cette commande fonctionne également de manière récursive. Mon cas d'utilisation serait de supprimer les fichiers .txt de moins de 12ko.
dim
pas besoin de sudo?
Jean-François Gagnon
11
Pour les tailles en octets, spécifiez 50c, pas 50b ou 50!
Evengard le