To jedna wkładka jest najbardziej skutecznym sposobem na znalezienie 100% przy użyciu plików nul GNU find, xargsoraz grep(zakładając, że jest ona zbudowana z obsługą PCRE):
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00]" --
Zalety tej metody w porównaniu z innymi podanymi odpowiedziami to:
- pliki nieliczne są uwzględniane podczas wyszukiwania.
- nieczytelne pliki nie są przekazywane do grep, dzięki czemu można uniknąć
Permission deniedostrzeżeń.
grepprzestanie czytać dane z plików po znalezieniu dowolnego bajtu innego niż nul ( LC_ALL=Csłuży do upewnienia się, że każdy bajt jest interpretowany jako znak ).
- puste pliki (zero bajtów) nie są uwzględniane w wynikach.
- mniej
grepprocesów skutecznie sprawdza wiele plików.
- ścieżki zawierające znaki nowej linii lub rozpoczynające się od
-są obsługiwane poprawnie.
- działa na większości systemów wbudowanych, w których brakuje języka Python / Perl.
Przekazywanie -Zopcji grepi używanie xargs -r0 ...pozwala na wykonanie dalszych działań na plikach 100% NUL (np .: czyszczenie):
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00]" -- |
xargs -r0 rm --
Polecam również korzystanie z findopcji, -Paby uniknąć następujących dowiązań symbolicznych i -xdevaby uniknąć przechodzenia przez systemy plików (np. Zdalne montowanie, drzewa urządzeń, montowanie powiązań itp.).
Aby zignorować znaki końca linii , powinien działać następujący wariant (choć nie sądzę, że to dobry pomysł):
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00\r\n]" --
Złożenie wszystkiego razem, w tym usunięcie niechcianych plików (100% znaków nul / nowej linii), aby zapobiec ich tworzeniu kopii zapasowej:
find -P . -xdev -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00\r\n]" -- |
xargs -0 rm --
Nie polecam dołączania pustych plików (zero bajtów), często istnieją one w bardzo specyficznych celach .