비어 있지만 보이지 않는 파일을 포함하여 특정 디렉토리에서 빈 파일과 폴더를 모두 찾는 방법은 무엇입니까?


18

내 폴더 ~/list에는 각각 자체 하위 폴더 및 하위 하위 폴더 등이있는 많은 폴더가 있으며 각 레벨에 거의 많은 파일이 있다고 가정 해 봅시다 . 그러나 이러한 파일과 폴더 중 일부가 비어 있으므로 빈 파일과 폴더를 찾기 위해 모든 파일과 폴더를 재귀 적으로 검색하는 방법은 무엇입니까? 그런 다음 파일 위치 목록에 표시하여 각 위치가 어디인지 알 수 있도록하십시오 (모든 파일의 파일 확장자가 아니기 때문에 파일과 폴더 인지도 명확해야 함). 그놈 3.18과 함께 우분투 그놈 15.10을 실행하고 있습니다.

주의 사항 파일이 비어 보였지만, (그것 또는 무언가에 공백이나 줄 바꿈이 있다면 예를 들어)가 아니었다면 그것은 또한 말해한다면 그것은 또한 매우 유용 할 것이다. 그리고 실제 빈 파일과 출력에서 ​​비어있는 파일을 구별 합니다.


1
빈 파일, 문자가없는 파일입니까? (공백, 줄 바꿈 및 탭 일 수 있음)?
Jacob Vlijm

@JacobVlijm : 글쎄, 이전에는 0 바이트의 파일 만 생각하고 있었지만 이제 언급 했으므로 누군가 나에게 공백이나 줄 바꿈 등이있는 파일을 줄 정도로 미쳤을 수도 있습니다. 그러나 출력이 실제 빈 파일과 비어있는 파일을 구별하고 싶습니다.

답변:


25

에서 man find

    -empty File is empty and is either a regular file or a directory.

따라서 빈 파일과 디렉토리를 모두 찾으려면 충분합니다.

find ~/lists -empty

유형을 나타 내기 위해 %y출력 형식 지정자를 사용할 수 있습니다.

          %y     File's type (like in ls -l), U=unknown type (shouldn't happen)

예 :

find ~/lists -empty -printf '%y %p\n'

같은 외부 프로그램의 메이크업의 사용 또는 ls포함, --classify옵션을

    -F, --classify
          append indicator (one of */=>@|) to entries

find ~/lists -empty -exec ls -Fd {} \;

공백 문자 만 포함하는 파일을 포함하도록 '빈'에 대한 정의가 확장 된 경우, 비어 있지 않은 파일을 실제로 열고 내용을 검사해야하므로 더 복잡하고 계산 집약적입니다. 머리 꼭대기에서 생각할 수있는 가장 효율적인 방법은

find ~/list \( -empty -o \( -type f -a ! -exec grep -qm1 '[^[:blank:]]' {} \; \) \) -exec ls -Fd {} \;

비어 있거나, 파일 및 grep이 공백이 아닌 문자를 하나 이상 감지하지 못합니다. 아마도 더 좋은 방법이있을 것입니다.


죄송합니다. 누락 된 부분이 있습니다. 편집 된 버전의 질문을 확인하십시오. 너무 많이 추가해서는 안됩니다.

11

에서 ~/list폴더 :

find . -empty -type d

빈 디렉토리를 나열하고

find . -empty -type f

빈 파일을 나열합니다.

find . -type f -exec bash -c 'if [ `cat "{}" |wc -w` -eq 0 ]; then echo "file - {}";fi' \; -or -empty -exec bash -c "echo dir - {}" \; 

공백 및 빈 줄을 포함하여 빈 폴더 및 파일 나열


하위 폴더와 내용도 재귀 적으로 나열합니까?

빈 파일과 폴더를 재귀 적으로 표시합니다
EdiD

죄송합니다. 누락 된 부분이 있습니다. 편집 된 버전의 질문을 확인하십시오. 너무 많이 추가해서는 안됩니다.

[ `grep -c [[:alnum:]] "{}"` -eq 0 ][A-Za-z0-9]세트에 없는 문자 만 포함하는 파일을 통과시킵니다 .
kos

@kos-아마도 alnum 대신 그래프가 작동합니다
EdiD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.