특정 크기 이하의 파일을 삭제하고 싶어요. 예를 들어 다음과 같은 파일 목록이 있습니다.
-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
여러 기본 색상을 연결하여 연결을 얻을 수 있습니다(일부 버전에서는 색상 사이에 -a
OR을 넣을 수 있음 -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 $_: $!]
}
}
' *