Réponses:
Cela peut être fait avec find
:
find . -type f -size -1M -exec rm {} +
Notez que cela descendra récursivement dans les sous-répertoires et supprimera inconditionnellement tous les fichiers inférieurs à 1 mégaoctet. Faites attention.
find
. :)
find
limite le nombre d'arguments au processus appelé pour tenir dans les limites du système, contrairement à rm *
ce qui est garanti comme étant une invocation de processus unique. find
invoquera plusieurs instances de rm
si nécessaire. Et je suis presque sûr que les caractères spéciaux sont traités correctement, y compris les caractères de nouvelle ligne. Je préfère -exec rm
plutôt -delete
pour des raisons de flexibilité - à titre d'exemple, ce dernier n'offre aucun moyen de supprimer les fichiers protégés en écriture.
-1M
signifie moins d'un mégaoctet comme souhaité. Votre version supprimerait tous les fichiers avec exactement un mégaoctet, ce qui semble être une opération quelque peu inutile.
find . -type f -size +1M -exec rm {} +
. Notez le + 1M au lieu de -1M.
Cela devrait faire le travail:
$ find <directory> -type f -size -1M -delete
-
signe est un signe moins signifiant "moins de 1M". Si vous exécutez, find <directory> -type f -size +1M -delete
vous supprimerez tous les fichiers supérieurs à 1 Mo.
Juste pour la variété et un gain de performance possible (probablement marginal):
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargs
processus supplémentaire .
Vous pouvez consulter ce lien http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ , il a exactement ce que vous voulez.
for file in *;
do
file_size=$(du $file | awk '{print $1}');
if [ $file_size == 0 ]; then
echo "Deleting empty file $file with file size $file_size!";
echo "rm -f $file";
fi;
done
Vous pouvez parcourir tous les fichiers avec une boucle for puis utiliser du et awk pour trouver la taille du fichier comme dans l'exemple ci-dessus.
1M
.