Notez que cela descendra récursivement dans les sous-répertoires et supprimera inconditionnellement tous les fichiers inférieurs à 1 mégaoctet. Faites attention.
@DanielAndersson: 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.
Sven Marnach
1
@Invoker: J'ai annulé votre modification car elle était incorrecte. -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.
Sven Marnach
2
Pour toute personne intéressée, si vous souhaitez supprimer tous les fichiers supérieurs à 1 Mo, utilisez la commande find . -type f -size +1M -exec rm {} +. Notez le + 1M au lieu de -1M.
Je ne pense pas que nous ayons besoin de faire un trait d'union à partir de 1M.
Invocateur du
2
@Invoker, je crois que le -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.
chessofnerd
oui tu as raison ma mauvaise
Invocateur
2
Juste pour la variété et un gain de performance possible (probablement marginal):
find <directory>-type f -size -1M-print0 | xargs -0 rm
Comment est-ce censé être plus rapide? Il démarre un xargsprocessus supplémentaire .
Sven Marnach
Maintenant, vous pouvez avoir deux processeurs rivalisant pour le même périphérique de bloc! Plus judicieusement, les opérations stat / readdir ne sont pas bloquées de manière synchrone par l'opération de dissociation. La probabilité que cela soit meilleur dépend évidemment de la taille du sous-arbre, du nombre de fichiers, de l'appareil, etc.
Les réponses sur SO doivent être autonomes - ne publiez pas un simple lien. (De plus, le code dans le message lié supprime les fichiers vides plutôt que les fichiers inférieurs à 1M.)
Sven Marnach
@SvenMarnach ne peut-on pas utiliser $ file_size <1M dans le lien d'exemple de code donné.
Non, nous ne pouvons pas, car le shell ne comprendra pas 1M.
Sven Marnach
Par 1M, je voulais dire 1048576 convertissant 1 Mo en octets
1
Eh bien, si vous testez si cela fonctionne vraiment et copiez le code dans votre réponse, cela pourrait devenir une réponse SO.
Réponses:
Cela peut être fait avec
find
:Notez que cela descendra récursivement dans les sous-répertoires et supprimera inconditionnellement tous les fichiers inférieurs à 1 mégaoctet. Faites attention.
la source
find
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 derm
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:
la source
-
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):
la source
xargs
processus supplémentaire .Essayer
la source
\;
à la fin au lieu de+
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.
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.
la source
1M
.