Bash 스크립트는 "문자열"을 숫자로 변환합니다.

Bash 스크립트는 "문자열"을 숫자로 변환합니다.

파일 크기(추출: stat -c%s $filename)를 숫자로 확인하기 때문에 문자열을 interger로 변경해야 합니다. 전체 스크립트를 따르세요.

#!/bin/bash

# Variable that contain path destination file
path=/sobstitude

# Variable for size
size=1000

# Loop for file scan
for filename in /test/*;
do
    # Take the size of file
    filesize=$(stat -c%s $filename)

# Check if the file is empty
if [ $filesize > $size ]
then

    # Replace file
    mv $filename $path

fi
done

exit 0;

답변1

bash/ 변수 에는 sh문자열이 포함되어 있으므로 정수에 대한 엄격한 개념이 없습니다. 문자열은 정수처럼 보일 수 있으며 그것만으로도 충분합니다.

stat -c%s $filename정수처럼 보이는 문자열을 반환해야 합니다.

귀하의 경우 주요 문제는 리디렉션 연산자에 있습니다 >(이제 작업 디렉토리에 숫자로 된 이름을 가진 파일이 있을 수 있습니다). 이 스니펫:

[ $filesize > $size ]

해야한다

[ "$filesize" -gt "$size" ]

그리고변수 대체 및 명령 대체에는 큰따옴표를 사용하십시오..

답변2

데이터 유형을 "변환"할 필요가 없습니다. -gt또는 숫자를 비교하는 데 사용할 수 있습니다 -lt.

➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 4000 ]] && echo "bigger" || echo "smaller"
bigger

➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 400000 ]] && echo "bigger" || echo "smaller"
smaller

원칙적으로 틀린 말 >은 아닙니다. 당신이 사용할 수있는산술 표현식비교를 수행합니다.

나는 대신 [[에 그것을 사용했습니다[확장된 기능.

모든 변수 확장은 큰따옴표로 묶어야 합니다. 특히 $filename및 의 $path경우 공백이 포함된 경우 스크립트가 실패합니다.

답변3

여러분, 이것을 변경한 후 해결했습니다.

if ((filesize > size))

이제 일하세요. 지원해 주셔서 감사합니다

관련 정보