크기가 특정 값 사이 인 파일을 삭제하고 싶습니다. 예를 들어 다음과 같은 파일 목록이 있습니다.
-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
그러나 크기가 주어진 값보다 작은 파일에 대해 하나 이상의 경계를 추가하려면 어떻게해야합니까?
답변
범위는 단순히 상한 과 하한입니다. 로부터 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 $_: $!]
}
}
' *