이 one-liner는 GNU를 사용하여 100 % NUL 파일을 찾는 가장 효율적인 방법 find
이며 xargs
, grep
후자는 PCRE 지원으로 빌드되었다고 가정합니다.
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00]" --
제공된 다른 답변에 비해이 방법의 장점은 다음과 같습니다.
- 스파 스가 아닌 파일이 검색에 포함됩니다.
- 읽을 수없는 파일은 grep으로 전달되지 않으므로
Permission denied
경고 가 발생하지 않습니다 .
grep
널이 아닌 바이트를 찾은 후 파일에서 데이터 읽기를 중지합니다 ( LC_ALL=C
각 바이트 가 문자 로 해석되도록하는 데 사용됨) ).
- 빈 파일 (0 바이트)은 결과에 포함되지 않습니다.
- 더 적은
grep
프로세스가 여러 파일을 효율적으로 확인합니다.
- 개행 문자를 포함하거나로 시작하는 경로
-
는 올바르게 처리됩니다.
- Python / Perl이없는 대부분의 임베디드 시스템에서 작동합니다.
-Z
옵션을 전달 grep
하고 사용 xargs -r0 ...
하면 100 % 널 파일에 대해 추가 조치를 수행 할 수 있습니다 (예 : 정리).
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00]" -- |
xargs -r0 rm --
또한 심볼릭 링크를 따르지 않고 파일 시스템 통과 (예 : 원격 마운트, 장치 트리, 바인드 마운트 등) 를 피하기 위해 find
옵션 -P
을 사용하는 것이 좋습니다 -xdev
.
줄 끝 문자 를 무시하기 위해 다음 변형이 작동해야합니다 (그러나 이것이 좋은 생각은 아닙니다) :
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00\r\n]" --
원하지 않는 파일 (100 % 널 / 줄 바꾸기 문자)을 제거하여 파일이 백업되지 않도록하는 것을 포함하여이를 모두 정리하십시오.
find -P . -xdev -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00\r\n]" -- |
xargs -0 rm --
빈 파일 (0 바이트)을 포함하지 않는 것이 좋습니다. 종종 매우 구체적인 목적으로 존재 합니다 .