
파일 크기(추출: 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))
이제 일하세요. 지원해 주셔서 감사합니다