디렉터리의 파일 크기를 MB 단위로 가져오고 다양한 크기의 디렉터리에서 다양한 작업을 수행하고 싶습니다. 내 코드는 다음과 같습니다
file_size_with_path=$(du -sb $file_path)
file_size=$(echo "$file_size_with_path" | tr -d -c 0-9)
echo "$file_size"
## if directory size is betweem 1GB and 10 GB:
if [[ ($file_size < 10737418240 ) && ($file_size > 1073741824 ) ]]; then
echo "yoyo1"
block_size=$(($file_size/120))
block_size_in_bytes=$(($block_size*1024))
stripe_size_in_bytes=$((block_size_in_bytes/4))
## if directory size is greater than 10 GB
elif [[ ($file_size > 10737418240 ) ]] ; then
echo "yoyo2"
block_size_in_bytes="67108864"
stripe_size_in_bytes=$((block_size_in_bytes/4))
##if directory size is less than 1 GB
elif [[ ($file_size < 1073741824 ) ]] ; then
echo "yoyo3"
block_size_in_bytes="16777216"
stripe_size_in_bytes=$((block_size_in_bytes/4))
fi
크기가 3318222인 디렉터리에 대해 실행되면 코드는 두 번째 elif 블록(yoyo2를 인쇄함)으로 들어가지만 세 번째 elif 블록으로 가서 yoyo3을 인쇄해야 합니다. 누군가 문자열을 정수로 변환하고 비교하는 방법을 제안해 주세요.
나는 성공하지 못한 채 변수와 숫자 주위에 큰따옴표를 넣으려고 했습니다. 다른 답변을 보았지만 아무것도 작동하지 않는 것 같습니다.
감사해요.
답변1
여기에서 가정해보자 bash
.
대신에
if [[ ($file_size < 10737418240 ) && ($file_size > 1073741824 ) ]]
당신이 사용할 수있는
if (( file_size < 10737418240 )) && (( file_size > 1073741824 ))
이는 변수 이름이 정수로 해석되고 연산자 등이 일반적으로 정수와 마찬가지로 작동하는 (( ... ))
산술 계산입니다 .<
>
그리고
[[ $file_size < 10737418240 ]]
에 따라 현재 로케일의 정렬 순서로 두 문자열을 비교하고 있습니다 $LC_COLLATE
.
답변2
bash
쌍으로 테스트를 사용하는 경우 숫자 "보다 큼"과 "보다 작음"을 비교하려면 및 를 [[
]]
사용하세요 . 문자열 비교의 경우 이는 실제로 정확합니다.-gt
-lt
<
>
[[ 1000000 < 90 ]]