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. :)
findlimite 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. findinvoquera plusieurs instances de rmsi 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 rmplutôt -deletepour des raisons de flexibilité - à titre d'exemple, ce dernier n'offre aucun moyen de supprimer les fichiers protégés en écriture.
-1Msignifie 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 -deletevous 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
xargsprocessus 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.