x 바이트보다 크거나 작은 파일을 어떻게 찾을 수 있습니까?


237

터미널에서 x 바이트보다 크거나 작은 파일을 어떻게 찾을 수 있습니까?

나는 같은 것을 할 수 있다고 생각한다

find . -exec ls -l {} \;

그런 다음 결과를 파이프 awk로 파일 크기별로 필터링하십시오. 그러나 이것보다 쉬운 방법이 없어야합니까?

답변:


376

사용하다:

find . -type f -size +4096c

4096 바이트보다 큰 파일을 찾으려면

그리고 :

find . -type f -size -4096c

4096 바이트보다 작은 파일을 찾습니다.

크기 스위치 후 +와-차이를 확인하십시오.

-size스위치 설명 :

-size n[cwbkMG]

    File uses n units of space. The following suffixes can be used:

    `b'    for 512-byte blocks (this is the default if no suffix  is
                                used)

    `c'    for bytes

    `w'    for two-byte words

    `k'    for Kilobytes       (units of 1024 bytes)

    `M'    for Megabytes    (units of 1048576 bytes)

    `G'    for Gigabytes (units of 1073741824 bytes)

    The size does not count indirect blocks, but it does count
    blocks in sparse files that are not actually allocated. Bear in
    mind that the `%k' and `%b' format specifiers of -printf handle
    sparse files differently. The `b' suffix always denotes
    512-byte blocks and never 1 Kilobyte blocks, which is different
    to the behaviour of -ls.

11
@Jay : "Tests"섹션의 시작 부분 에서 man find 에서 : "숫자 인수는 n보다 큰 경우 + n, n보다 작은 경우 -n, 정확히 n의 경우 n으로 지정할 수 있습니다."
Dennis Williamson

4
맨 페이지는 맨 위에 언급하고 + 및-는 + 및-의미를 포함하여 숫자 ( 'n') 인수를 취하는 모든 스위치에 적용 할 수 있다고 설명합니다. (이것이 설명 된 섹션의 시작 부분을 찾으려면 매뉴얼 페이지에서 테스트를 검색하십시오)
Slartibartfast

1
@Dennis Williamson : 이상하고 + 및-OS X에서 작동하지만 매뉴얼 페이지에는 테스트 섹션이 없습니다. 사실, 그것은 당신의 링크에 비해 큰 덩어리가 없습니다. 테스트, 액션, 운영자 등이 없습니다.
천장 고양이

1
매뉴얼 페이지의 GNU 버전에 "Tests"섹션이 있지만 BSD 버전에는 없습니다. linuxmanpages.com/man1/find.1.php
Jay

8
방금 BSD 맨 페이지가 +/- 일을 설명한다는 것을 알았습니다. "기본"섹션의 끝 부분에 있습니다. – 숫자 인수를 사용하는 모든 기본은 숫자 앞에 더하기 부호 ( "+") 또는 빼기 부호 ( "-")를 사용할 수 있습니다. 앞의 더하기 부호는 "n 이상"을 의미하고, 앞의 빼기 ​​부호는 "n 이하"를 의미하고 어느 것도 "정확히 n"을 의미하지 않습니다
Jay

7

findAWK로 배관하지 않고 단독으로 유용 할 수 있다고 생각 합니다. 예를 들어

find ~ -type f -size +2k  -exec ls -sh {} \;

물결표는 검색을 시작할 위치를 나타내며 결과는 2KB보다 큰 파일 만 표시해야합니다.

멋지게 만들기 위해 -exec옵션을 사용하여 다른 디렉토리를 크기와 함께 나열하는 다른 명령을 실행할 수 있습니다 .

자세한 내용은의 매뉴얼 페이지를 참조하십시오find .


4

AWK는 이런 종류의 일에 정말 쉽습니다. 다음과 같이 파일 크기 검사와 관련하여 수행 할 수있는 작업은 다음과 같습니다.

200 바이트보다 큰 파일을 나열하십시오.

ls -l | awk '{if ($5 > 200) print $8}'

200 바이트 미만의 파일을 나열하고 파일에 목록을 작성하십시오.

ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog

0 바이트의 파일을 나열하고 목록을 파일에 기록하고 빈 파일을 삭제하십시오.

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm


(또는 ) tee와 같이 파일로 파이핑 하고 파일로 리디렉션하는 것의 차이점은 무엇입니까 ? ls -l > filelogls -l >> filelog
OmarOthman

3

2000 바이트 이상 :

du -a . | awk '$1*512 > 2000 {print $2}'

2000 바이트 미만 :

du -a . | awk '$1*512 < 2000 {print $2} '

du는 디스크의 공간을 차지하기 때문에 나쁩니다. 파일 크기와 다릅니다. 예를 들어 압축 파일 시스템 (btrfs / zfs)이있는 경우 du는 ls와 다른 결과를 제공하여 실제 압축 해제 된 크기를 보여줍니다.
chris scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.