생성된 백업 파일을 디렉터리에 복사하기 전에 스크립트는 먼저 같은 이름의 파일이 존재하지 않는지 확인해야 합니다. (스크립트를 처음 작성하는 경우입니다.)
#!/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 명령을 실행하기 전에 확인하는 것이 좋다고 생각합니다. 더 나은 옵션.