쉘 스크립트 백업 디렉토리 및 파일이 존재하는지 확인

쉘 스크립트 백업 디렉토리 및 파일이 존재하는지 확인

결과 백업 파일을 디렉터리에 복사하기 전에 스크립트는 먼저 같은 이름의 파일이 없는지 확인해야 합니다. (이번이 스크립트를 처음 작성하는 것입니다.)

#!/bin/bash

time=$(date +%m-%d-%y)
Backup_file=/home/abc
Dest=/home/def
filename=back-$time.tar.gz

tar -czf $Dest/$filename /home/abc
read $file

if [ -f $file ]; then
      echo "Error file $file already exist!"
else
      mv $file /home/def
fi

답변1

사용 중인 명령 은 디렉터리를 디렉터리 에 tar백업하는 실제 작업을 수행합니다 . "결과 백업 파일을 디렉터리에 복사"하기 전에 해당 디렉터리에 이 파일 이름이 있는지 확인하려면 해당 tar 명령을 실행하기 전에 파일이 있는지 테스트해야 할 것입니다. 와 같은:/home/abc$filename/home/def

#!/bin/bash

time=$(date +%m-%d-%y)
Backup_file=/home/abc
Dest=/home/def
filename=back-$time.tar.gz

if [ -f $filename ]; then
  echo "Error file $filename already exist!"
else
  tar -czf $Dest/$filename /home/abc
fi

그러나 몇 가지 "개선 사항"을 제안할 수 있습니다.

#!/bin/bash

today=$(date +%Y-%m-%d)
Backup_file=/home/abc
Dest=/home/def
filename=back-${Backup_file//\//_}-${today}.tar.gz

if [ -f ${filename} ]; then
  echo "Error file ${filename} already exists!"
else
  tar -czf ${Dest}/${filename} ${Backup_file}
fi
  • 4자리 연도, 월, 일을 사용하도록 날짜 형식을 변경했습니다(기본 설정).
  • @Nasir가 지적한 대로 변수 이름도 변경했습니다.
  • 같은 날 백업할 수 있는 영역이 두 개 이상인 경우 백업 파일 이름에 백업 중인 영역을 표시하는 것이 유용할 수 있으므로 내 filename변수는 변수를 사용 Backup_file하지만 '/'의 모든 인스턴스를 '_'로 바꿉니다. (매개변수 확장 섹션에 따라 man bash문자의 모든 인스턴스를 대체하는 이 답변)
  • 마지막으로 tar 명령에서 변수를 사용했기 Backup_file때문에 변수를 변경하면 한 곳에서만 변경하면 됩니다(꼭 권장)

tar 명령을 실행한 다음 파일이 있는지 확인하려면 나중에 이동할 수 있도록 임시 위치에 tar를 저장해야 합니다. 하지만, 같은 이름의 파일이 이미 존재하는 경우 tar 파일에 대해 아무 조치도 취하지 않을 경우 이를 알아내기까지 많은 시간을 낭비하게 될 수 있으므로 tar 명령을 실행하기 전에 확인하는 것이 더 낫다고 생각합니다. 옵션.

관련 정보