2009-02-13 10 views
7

Quel est le moyen le plus simple/le meilleur pour trouver et supprimer des fichiers vides (octets zéro) en utilisant uniquement des outils natifs de Mac OS X?Suppression de fichiers vides (zéro octet)

+0

s'il vous plaît préciser! un fichier vide, tous les fichiers vides? Qu'avez-vous essayé, où sont les erreurs? – hop

+0

Un commentaire à ma réponse a clarifié la question; mise à jour appropriée. –

+0

Merci Charles Duffy. Désolé pour mon mauvais anglais: p – Bank

Répondre

15

Assez facile:

find . -type f -size 0 -exec rm -f '{}' + 

Pour ignorer tout fichier ayant xattr contenu (en supposant que la mise en œuvre MacOS find):

find . -type f -size 0 '!' -xattr -exec rm -f '{}' + 

Cela dit, notez que beaucoup xattrs ne sont pas particulièrement utiles (Par exemple, com.apple.quarantine existe sur tous les fichiers téléchargés).

+1

-type f bon appel – dwc

+0

J'utilise trouver. -size 0 -exec rm {} \; mais ajouter -type f devrait être mieux – Bank

+0

Donc, en anglais, "trouver tous les fichiers vides dans le répertoire en cours et les supprimer sans inviter l'utilisateur"? – endolith

1
find /path/to/stuff -empty 

Si c'est la liste des fichiers que vous recherchez pour ensuite faire la commande:

find /path/to/stuff -empty -exec rm {} \; 

Attention! Il n'y aura aucun moyen de défaire ça!

+0

Mieux vaut utiliser + que; Si vous avez une recherche actuelle, elle agira comme xargs si elle était dans le pipeline. –

1

Utilisation:

find . -type f -size 0b -exec rm {} ';' 

avec toutes les autres variantes possibles pour limiter ce qui est supprimé.

8

Vous pouvez réduire le nombre potentiellement énorme des fourches pour exécuter/bin/rm par:

find . -type f -size 0 -print0 | xargs -0 /bin/rm -f 

La commande ci-dessus est très portable, fonctionnant sur la plupart des versions d'Unix plutôt que de simples boîtes Linux, et sur les versions d'Unix qui remonte à plusieurs décennies. Pour les listes de fichiers longues, plusieurs commandes /bin/rm peuvent être exécutées pour empêcher la liste de dépasser la limite de longueur de la ligne de commande.

Un effet similaire peut être obtenu avec moins de frappe sur plus récents systèmes d'exploitation, en utilisant un + en find pour remplacer l'utilisation la plus courante de xargs dans un style se prête encore à d'autres actions en dehors /bin/rm. Dans ce cas, find gère la séparation des listes de fichiers vraiment longues en commandes /bin/rm séparées. Le {} est habituellement cité pour empêcher le shell de faire quoi que ce soit; les citations ne sont pas toujours nécessaires, mais les subtilités de shell citer sont trop impliqués pour couvrir ici, donc en cas de doute, inclure les apostrophes:

find . -type f -size 0 -exec /bin/rm -f '{}' + 

Dans Linux, les approches briefer sont généralement disponibles en utilisant -delete. Notez que find-delete primaire est directement mis en œuvre avec unlink (2) et ne génère pas de commandes zillion /bin/rm, ou même le peu que xargs et + font. Mac OS find a également les primaires -delete et -empty.

find . -type f -empty -delete 

Pour taper du pied des fichiers vides (et nouvellement vidées) - répertoires aussi bien - de nombreux hôtes Linux modernes peuvent utiliser cette approche efficace:

find . -empty -delete 
+1

+1 C'est la meilleure réponse. –

+1

Ceci _does_ améliore la portabilité, accordée - mais 'find -exec ... {} +' est disponible uniquement au-delà de Linux. Immédiatement, Solaris 11 et OS X supportent cette addition récente à la spécification POSIX pour find (ajouté dans le numéro 6 de 1003.1). –

+0

La syntaxe '+' est moins portable, mais reste assez portable. Ce n'est certainement pas disponible sur un certain nombre de * vieux * Unixen qui * ont * ont 'xargs'. 'xargs' est aussi beaucoup plus flexible que le' + ', bien que la fréquence de ce besoin supplémentaire soit vraiment faible. Je vais ajouter le formulaire «+», cependant. –