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

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

생성된 백업 파일을 디렉터리에 복사하기 전에 스크립트는 먼저 같은 이름의 파일이 존재하지 않는지 확인해야 합니다. (스크립트를 처음 작성하는 경우입니다.)

#!/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 명령을 실행하기 전에 확인하는 것이 좋다고 생각합니다. 더 나은 옵션.

관련 정보