ls를 사용하여 비어 있지 않은 파일 만 나열하려면 어떻게해야합니까?


답변:


49

find dirname -not -empty -lsGNU find를 가정하고을 사용 합니다.


1
downvote를 설명 할 사람이 있습니까?
데니스

아마 asker가 요청 ls하고 당신이 사용 했기 때문에 find;) 나는
올라갔지

2
"find. -not -empty -ls"를 사용하는 경우 현재 디렉토리를 포함하기 위해 현재 디렉토리도 포함됩니다 (예 : 출력에 "."). "find. -type f -not -empty -ls"
user672009

19

이것은 ls가 충분히 강력하지 않은 것을 찾기 위한 직업입니다 .

find -maxdepth 1 -size +0 -print

-maxdepth 1 -현재 디렉토리 만 검색하고, 모든 하위 디렉토리를 찾기 위해 제거하거나, 2, 3 또는 그 이상의 레벨로 내려가도록 숫자를 변경하도록합니다.

-size +0이것은 0바이트 보다 큰 크기의 파일을 찾도록 알려줍니다 . 0원하는 크기로 변경할 수 있습니다.

-print 찾은 파일의 전체 경로를 인쇄하도록 find에 지시합니다.

편집 :
늦은 추가 : 아마도 -type f위 의 스위치를 추가해야합니다 . 이렇게하면 찾기는 파일 만 찾도록 지시합니다. 아래 주석에서 언급했듯이 -print스위치는 실제로 필요하지 않습니다.


1
경고를 피하려면 -maxdepth 1먼저 배치 해야 -size +0합니다. 또한 -print기본 동작이므로 필요하지 않습니다.
cYrus

@cYrus-경고가 없습니다. (cygwin)
Nifle

find유효한 옵션이 무엇이고 어디로 갈 수 있는지 에 따라 구현이 다양합니다. GNU find(끔찍하게 흔함) 만약 당신이 -size앞에 두면 경고 -maxdepth 입니다.
Telemachus 2016 년


8
ls -l | awk '{if ($5 != 0) print $9}'

를 사용하려는 경우 ls약간의 도움이 필요합니다 awk.


7

LS는 파일을 필터링 할 수있는 옵션이 거의 없습니다. 그것은 그 일이 아닙니다. 파일 필터링은 간단한 경우 (글 로빙을 통해)의 쉘 작업이고 복잡한 경우를 찾는 작업입니다.

zsh에서는 Lglobbing 한정자가 크기가> 0 인 파일 만 유지하도록 할 수 있습니다 ( .한정자는 일반 파일로 제한됨).

ls *(.L+0)

다른 쉘 사용자는 find를 사용해야합니다. GNU find (대부분 Linux에서 발견) :

find -maxdepth 1 -type f ! -empty -exec ls {} +

POSIX 호환 방법은 다음과 같습니다.

find . -type f -size +0c -exec ls {} + -o -name . -o -prune

경우 ls당신이 크기를 기준으로 정렬 할 수 단지 예 아니었고 당신은 단순히 육안 검사를하려는 : ls -S.


3
 $ find /* -type f ! -size 0

디렉토리가 아닌 비어 있지 않은 파일을 모두 원한다면 더 잘 작동합니다.


1

배쉬 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.