2009-02-13 17 views
7

Jaki jest najłatwiejszy/najlepszy sposób na wyszukanie i usunięcie pustych (zero-bajtowych) plików przy użyciu wyłącznie narzędzi rodzimych dla Mac OS X?Usuwanie pustych (zero-bajtowych) plików

+0

Proszę wyjaśnić! jeden plik pusty, wszystkie puste pliki? co wypróbowałeś, gdzie są błędy? – hop

+0

Komentarz do mojej odpowiedzi wyjaśnił pytanie; aktualizacja odpowiednio. –

+0

Dziękuję Charles Duffy. Przepraszamy za mój zły angielski: p – Bank

Odpowiedz

15

dość łatwe:

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

Aby zignorować każdy plik mający xattr treści (zakładając realizację MacOS find):

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

Mimo to należy pamiętać, że wiele xattrs nie są szczególnie użyteczne (na przykład com.apple.quarantine istnieje dla wszystkich pobranych plików).

+1

-type f good call – dwc

+0

Używam find. -size 0 -exec rm {} \; ale dodaj -type f powinno być lepsze – Bank

+0

Więc, po angielsku, "znajdź wszystkie puste pliki w bieżącym katalogu i usuń je bez pytania użytkownika"? – endolith

1
find /path/to/stuff -empty 

Jeśli to lista plików, których szukasz następnie dokonać polecenie:

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

Bądź ostrożny! Nie będzie sposobu, aby to cofnąć!

+0

Lepiej używać + niż; jeśli masz bieżące znalezisko - w ten sposób działa tak, jak gdyby xargs znalazł się w potoku. –

1

Zastosowanie:

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

wszystkich innych możliwych wariantów w celu ograniczenia co zostanie usunięty.

8

Można obniżyć potencjalnie ogromną liczbę widelce uruchomić/bin/rm przez:

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

Powyższa komenda jest bardzo przenośne, działa na większości wersji systemu Unix, a nie tylko Linuksami oraz w wersjach Unixa od dziesięcioleci. W przypadku długich list plików można wykonać kilka poleceń /bin/rm, aby nie przekroczyć limitu długości wiersza poleceń.

Podobny efekt można osiągnąć przy mniejszej wpisywanie na nowszych systemów operacyjnych, za pomocą + w find wymienić najczęstsze zastosowanie xargs w stylu nadal nadaje się do innych działań oprócz /bin/rm. W takim przypadku find będzie obsługiwać dzielenie naprawdę długich list plików na oddzielne polecenia /bin/rm. {} jest zwykle cytowany, aby powstrzymać powłokę przed zrobieniem czegokolwiek; cytaty nie zawsze są wymagane, ale zawiłości skorupy cytując są zbyt zaangażowani na pokrycie tutaj, więc w razie wątpliwości, zawierają apostrof:

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

w Linuksie, Ipanema zajmuje podejścia są zwykle dostępne przy użyciu -delete. Zauważ, że główny protokół find-delete jest bezpośrednio implementowany z unlink (2) i nie odradza się komend Zillion /bin/rm, ani nawet kilku, które robią xargs i +. Mac OS find ma również prymitywy -delete i -empty.

find . -type f -empty -delete 

Stomp pusty (i nowo opróżnione) plików - katalogi, a także - wiele współczesnych gospodarze Linux mogą korzystać z tej efektywne podejście:

find . -empty -delete 
+1

+1 To jest lepsza odpowiedź. –

+1

Poprawia to możliwość przenoszenia, przyznawania - ale 'find -exec ... {} +' jest dostępny tylko poza Linuksem. Natychmiast od ręki zarówno system Solaris 11, jak i OS X obsługują ten ostatni dodatek do specyfikacji POSIX do wyszukiwania (dodano w numerze 6 1003.1). –

+0

Składnia "+" jest mniej przenośna, ale nadal dość przenośna. Z pewnością nie jest dostępny na kilku * starych * Uniksach, które * mają * mają 'xargs'. 'xargs' jest także dużo bardziej elastyczny niż' + ', chociaż częstotliwość wymagająca tego dodatkowego flexu jest naprawdę niska. Dodam jednak formularz '+'. –

Powiązane problemy