디렉터리 및 하위 디렉터리에서 모든 0 바이트 파일 찾기


82

디렉토리 및 하위 디렉토리에서 모든 0 바이트 파일을 어떻게 찾을 수 있습니까?

나는 이것을했다 :

#!/bin/bash
lns=`vdir -R *.* $dir| awk '{print $8"\t"$5}'`
temp=""
for file in $lns; do
    if test $file = "0"; then
        printf $temp"\t"$file"\n"
    fi
    temp=$file
done

그러나 하위 디렉토리가 아닌 현재 디렉토리에서만 결과를 얻습니다. 파일 이름에 공백이 포함되어 있으면 첫 번째 단어와 탭만 표시됩니다.


1
읽을 수 있습니다 man find.
alk

1
유닉스 & 리눅스 에도 게시 된 질문 -동일한 질문을 여러 곳에 게시하지 마십시오.
glenn jackman 2013 년

다음 메신저는 내가 슈퍼 유저에 게시 유래와 내 브라우저에 의한 문제 같은 repeate하지하지만 지금은 문제가 청산의 역사 쿠키에 의해 고정 catche에서 즉, 내가 여기 다시 물었다 그래서
CIVA

답변:


174

$ dir 크기 0 이하의 모든 파일 이름을 인쇄하려면 :

find "$dir" -size 0

의 모든 구현이 find기본적으로 출력을 생성 하는 것은 아니므로 다음을 수행해야 할 수 있습니다.

find "$dir" -size 0 -print

질문의 마지막 루프에 대한 두 가지 의견 :

문자열의 다른 모든 단어를 반복하고 대체 값이 0인지 확인하는 대신 행을 반복하여 공백으로 발생한 문제를 부분적으로 제거 할 수 있습니다. 예 :

printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
    test "$size" -eq 0 && echo "$path"; done

ls에 의해 출력되는 경로에 줄 바꿈이 포함되어 있으면 두 가지 점이 강화됩니다. 구문 분석 ls하지 말고 경로에 공백을 허용하지 않는 정상적인 이름 지정 정책을 사용하십시오.

둘째, 루프에서 데이터를 출력하기 위해 출력을 변수에 저장할 필요가 없습니다 echo. 루프가 출력을 stdout에 쓰기 만하면 동일한 작업을 수행하지만 저장하지 않습니다.


내가 * .XML 이외의 디렉토리 필터링 할 수 있습니다
CIVA

2
편리한 -empty옵션 도 있습니다.
Wesley Baugh

-empty 옵션을 사용하면 내부 제로 파일도 디렉토리를 얻을 @WesleyBaugh
이고르 Scabini

1
@IgorScabini 파일로 제한하려면 -type f.
Wesley Baugh

아름다운! 간단하고 요점. 이 find명령을 충분히 사용하지 않습니다 . 나는 그것을 알아내는 것에 대한 나의 두려움을 정말로 극복해야한다. 매우 유용합니다.
racl101

32

위의 답변 외에도 :

해당 파일을 삭제하려면

find $dir -size 0 -type f -delete

1
항상 크기가 0 인 파일을 모두 삭제할 필요는 없습니다.
Raghvendra

그럼 어떻게 크기를 0으로 폴더 내 파일을 삭제합니다
Raghvendra

-exec /bin/rm {} \;또는 비표준 확장을 지원하지 않는 -exec /bin/rm {} +비 GNU find구현에서도 작동 합니다-delete
Gert van den Berg

8

아니, grep을 귀찮게 할 필요가 없습니다.

find $dir -size 0 ! -name "*.xml"

3

Bash 4+ 테스트 됨-이것은 크기 0을 검색하는 올바른 방법입니다.

find /path/to/dir -size 0 -type f -name "*.xml"

크기가 0 인 여러 파일 확장자 검색 :

find /path/to/dir -size 0 -type f \( -iname \*.css -o -iname \*.js \)

참고 : \ (... \)를 제거하면 결과는이 요구 사항을 충족하는 모든 파일이되므로 크기 0은 무시됩니다.


-iname일부 비 GNU 구현에 이식 할 수 없습니다 find를 참조 여기에 표준 목록은 옵션
게르트 반 베르그 덴
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.