를 사용하면 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