특정 크기 범위의 파일 삭제 389 Apr 30

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

-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

위의 목록에서 386b390b 사이의 크기가 다른 파일 만 삭제 하고 싶습니다 . 다음 명령을 사용하여 특정 크기를 초과하는 파일을 삭제할 수 있음을 알고 있습니다 <size>.

find . -size +<size>-delete

그러나 크기가 주어진 값보다 작은 파일에 대해 하나 이상의 경계를 추가하려면 어떻게해야합니까?



답변

범위는 단순히 상한 하한입니다. 로부터 find사양 :

표현 [-a] 표현

1 차 연결; AND 연산자는 두 개의 1 차 병렬 처리에 의해 내포되거나 선택적 -a 연산자에 의해 명시됩니다. 첫 번째 표현이 거짓이면 두 번째 표현은 평가되지 않습니다.

따라서 -delete조치 전에 두 크기 한계를 지정하기 만하면됩니다.


답변

-a명시 적으로 AND두 개의 경선을 결합하다 할 수 있습니다 연산자. 이 경우을 사용하여 범위를 -size만듭니다.

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

크기는 선택적으로 +and 앞에 추가 할 수있는 숫자 인수입니다 -. 보낸 사람 man 1 find:

   Numeric arguments can be specified as

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

답변

find숫자를 기대할 때 마다이 숫자 +보다 큰 -부호를 나타내거나이 숫자보다 작은 부호를 붙일 수 있습니다. 이러한 엄격한 불평등 있습니다 +3-7수단 (4), 5 또는 6.

-size기본을 사용하면 c숫자가 바이트 수임을 나타내는 접미사를 추가해야 합니다. 여러 기본을 연결하여 연결을 수행 할 수 있습니다 (일부 버전에서는 기본 간 -a또는 -and사이에 둘 수 있음). 그러므로:

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

zsh에서는 L glob 한정자를 사용할 수 있습니다 . 기본 단위는 바이트입니다. 와 같이 find문자 +-엄격한 불평등을 나타냅니다.

rm *(L+385-391)

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


답변

한 가지 방법으로 perl:

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

답변