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
Odpowiedz
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).
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ąć!
Lepiej używać + niż; jeśli masz bieżące znalezisko - w ten sposób działa tak, jak gdyby xargs znalazł się w potoku. –
Zastosowanie:
find . -type f -size 0b -exec rm {} ';'
wszystkich innych możliwych wariantów w celu ograniczenia co zostanie usunięty.
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 To jest lepsza odpowiedź. –
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). –
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 '+'. –
Proszę wyjaśnić! jeden plik pusty, wszystkie puste pliki? co wypróbowałeś, gdzie są błędy? – hop
Komentarz do mojej odpowiedzi wyjaśnił pytanie; aktualizacja odpowiednio. –
Dziękuję Charles Duffy. Przepraszamy za mój zły angielski: p – Bank