IF 조건을 사용하여 파일 크기가 1MB보다 큰지 확인

IF 조건을 사용하여 파일 크기가 1MB보다 큰지 확인

를 사용하면 ls -lh파일 크기를 얻을 수 있습니다.

파일 크기가 1MB보다 큰지 확인하고 아래와 같은 메시지를 출력할 수 있는 방법이 있나요? 100mb, 1gb, 10gb, 100kb와 같은 다양한 크기의 파일이 있을 수 있습니다.

if [ $FileSize > 1MB ];
then
    echo "File size is grater than 1MB"
fi

if문을 사용하여 파일 크기를 확인하는 방법이 있습니까 ?

답변1

find다음의 특정 파일에 사용 $filepath:

if [ -n "$(find "$filepath" -prune -size +1000000c)" ]; then
    printf '%s is strictly larger than 1 MB\n' "$filepath"
fi

특정 파일의 크기를 find쿼리 하는 데 사용됩니다 . $filepath크기가 1000000바이트보다 크면 find파일의 경로 이름이 인쇄되고, 그렇지 않으면 아무것도 생성되지 않습니다. -n문자열의 길이가 0이 아닌 경우 테스트는 참입니다. 이 경우에는 find무언가가 출력되었음을 의미하며 이는 파일이 1MB보다 크다는 것을 의미합니다.

당신은 이것을 묻지 않았습니다: 일부 파일에서 1MB보다 큰 모든 일반 파일을 찾고 $dirpath각 파일에 대해 짧은 메시지를 인쇄합니다.

find "$dirpath" -type f -size +1000000c \
    -exec printf '%s is larger than 1 MB\n' {} +

이 코드는 모든 Unix로 이식 가능해야 합니다.


또한 테스트에서 <또는 를 사용하면 >관련된 두 문자열이 특정 사전순으로 정렬되어 있는지 여부가 테스트됩니다. 이러한 연산자는 수치 비교를 수행하지 않습니다. 이렇게 하려면 -lt("보다 작음"), -le("보다 작거나 같음"), -gt("보다 큼") 또는 -ge("크거나 같음"), -eq("같음") 또는 -ne("를 사용합니다. 같지 않음"). 이 연산자는 정수 비교를 수행합니다.

답변2

파일을 한 번에 하나씩 쿼리하려는 경우 stat크기 등을 포함하여 특정 파일의 다양한 속성을 쿼리하기 위한 일반적인 도구입니다.

FileName="foo"
FSize=1048576
if [ $(stat -f %z "$FileName") -gt $FSize ]; then
    printf "File %s is larger than %d bytes.\n" "$FileName" $FSize
fi

당신이 정말로 찾고 있는 것이 많은 수의 파일을 쿼리하고 특정 크기 이상의 파일 이름만 추출하는 방법이라면 이것이 find당신이 원하는 것일 수 있습니다.

DIRECTORY에 있는 파일 세트가 주어지면 FSize 바이트보다 큰 파일을 찾습니다.

DIRECTORY="/path/to/your/files"
FSize="1M"
find $DIRECTORY -type f -size +$FSize

관련 정보