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