Bash 스크립트, 파일 크기 찾기 및 실행되지 않는 비교

Bash 스크립트, 파일 크기 찾기 및 실행되지 않는 비교

아래 코드에서 볼 수 있듯이 bash는 매우 새로운 기능입니다.

파일 크기를 바이트 단위로 가져와서 고정된 값과 비교하고 후자가 너무 작은 경우 이메일을 보내고 싶습니다.

암호:

#!/bin/bash
f=$(find /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz -ctime 0 -print -exec ls -l {} \; | awk '{print $5}')

if [$f -lt 60000000000] ; then
echo "hello";
fi

위 명령의 출력은 18607414901바이트 단위로 18GB입니다.

내가 원하는 것은 60GB 미만인 경우 명령을 실행하는 것입니다. 이 echo명령은 테스트용으로만 사용됩니다.

./backupsql.sh: line 4: [: missing `]'

답변1

테스트에는 공백이 필요합니다.

if [ $f -lt 60000000000 ] ;then
    echo "Hello"
fi

답변2

wc옵션과 함께 명령을 사용할 수 있습니다 -c(바이트 수 인쇄) 추가 비교를 위해 파일 크기를 바이트 단위로 가져옵니다.

#!/bin/bash

s=$(wc -c < /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz)
if [ $s -lt 60000000000 ]; then
echo "hello"
fi

stat또 다른 방법은 옵션과 함께 명령을 사용하는 것입니다 -c.

#!/bin/bash

s=$(stat -c "%s" /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz)
if [ $s -lt 60000000000 ]; then
echo "hello"
fi

-c- 지정된 형식을 사용하도록 지시합니다.

%s- 전체 크기를 바이트 단위로 나타내는 형식

답변3

스크립트? 이것은 문장입니다:

[ $(stat -c %s $(ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz | tail -n 1)) -lt 60000000000 ] && echo "Error" | mail -s "Too small" [email protected]

ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz모든 파일은 타임스탬프의 역순으로 나열됩니다. 마지막이 최신입니다. tail -n 1마지막 파일이 표시됩니다. $(..)명령의 텍스트입니다. stat -c %s <file>파일의 크기가 표시됩니다. 실제로는 /usr/bin/test 명령이고 반환 코드가 그 이후의 명령을 실행하는 [ ... ]것이라면 .0&&

crontab에서 이 명령을 실행하는 경우 %escapes 를 사용해야 합니다 \.[ $(stat -c \%s ..

스크립트 버전:

#! /bin/bash
LASTFILE=$(ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz | tail -n 1)
if [ $(stat -c %s $LASTFILE) -lt 60000000000 ]; then
  echo "$LASTFILE" | mail -s "Too small" [email protected]
fi

관련 정보