특정 크기 범위 내의 파일 삭제

특정 크기 범위 내의 파일 삭제

특정 크기 이하의 파일을 삭제하고 싶어요. 예를 들어 다음과 같은 파일 목록이 있습니다.

-rw-r--r-- 1 smsc sys  558 Apr 30 13:07 stats.sfe.1.20120430130513.xml.Z
-rw-r--r-- 1 smsc sys  388 Apr 30 15:32 stats.sfe.1.20120430153013.xml.Z
-rw-r--r-- 1 smsc sys  386 Apr 30 15:36 stats.sfe.1.20120430153513.xml.Z
-rw-r--r-- 1 smsc sys  389 Apr 30 15:42 stats.sfe.1.20120430154013.xml.Z
-rw-r--r-- 1 smsc sys  390 Apr 30 16:02 stats.sfe.1.20120430160013.xml.Z
-rw-r--r-- 1 smsc sys  385 Apr 30 16:12 stats.sfe.1.20120430161013.xml.Z

위 목록에서 크기가 다른 파일만 삭제하고 싶어요386b그리고390b. 다음 명령을 사용하여 특정 크기보다 큰 파일을 삭제할 수 있다는 것을 알고 있습니다 <size>.

find . -size +<size>-delete

하지만 크기가 주어진 값보다 작은 파일에 대한 경계를 추가하는 방법은 무엇입니까?

답변1

두 가지 기본 색상을 연결할 수 있는 -a명시적 연산자 입니다 . AND이 예에서는 범위 만들기가 사용되었습니다 -size.

find . -size +386b -a -size -390b -exec rm -f {} \;

size는 숫자 매개변수이며 선택적으로 +sum 앞에 올 수 있습니다 -. 에서 man 1 find:

   Numeric arguments can be specified as

   +n     for greater than n,
   -n     for less than n,
    n      for exactly n.

답변2

find숫자가 필요할 때마다 +숫자 앞에 기호를 추가하여 이보다 큰 숫자를 나타내거나 숫자 앞에 기호를 추가하여 -이보다 작은 숫자를 나타낼 수 있습니다. 이는 엄격한 부등식입니다. +3-7는 4, 5 또는 6을 의미합니다.

기본 의 경우 숫자가 바이트 수임을 나타내기 위해 -size접미사를 추가해야 합니다 . c여러 기본 색상을 연결하여 연결을 얻을 수 있습니다(일부 버전에서는 색상 사이에 -aOR을 넣을 수 있음 -and). 그러므로:

find . -size +385c -size -391c -delete

zsh에서는 사용할 수 있습니다L 글로벌 예선. 기본 단위는 바이트입니다. 와 같은 문자는 find엄격한 부등식을 나타냅니다.+-

rm *(L+385-391)

(위 명령은 하위 디렉터리로 재귀되지 않습니다. **/필요한 경우 패턴 앞에 추가하세요.)

답변3

범위는 단지 상한일 뿐입니다그리고하한. ~에서find사양:

표현식[-a] 표현식

기본 조합, AND 연산자는 두 개의 기본 연산자를 병치하여 암시적으로 사용하거나 선택적 -a 연산자를 통해 명시적으로 사용합니다. 첫 번째 표현식이 false이면 두 번째 표현식을 평가하면 안 됩니다.

-delete따라서 작동하기 전에 두 가지 크기 범위를 지정하기 만 하면 됩니다 .

답변4

그것을 사용하는 한 가지 방법 perl:

perl -e '
    for ( @ARGV ) { 
        if ( -s >= 386 && -s _ <= 390 ) { 
            unlink $_ or printf qq[%s\n], qq[Could not delete $_: $!] 
        } 
    }
' *

관련 정보