파일을 마지막으로 수정된 속성 및 현재 날짜와 비교해야 하는 백업 스크립트(bash 쉘 - Fedora - VMware)를 작업 중입니다. 마지막 수정 날짜가 스크립트의 마지막 실행 날짜보다 이전인 경우 이를 백업해야 합니다. 위로.
몇 가지(awk, stat 및 grep)를 시도했지만 비교할 수 있고 파일을 백업해야 하는지 스크립트가 결정하도록 할 수 있는 것을 만들 수 없습니다.
2가지 사례 진술에 집중하세요.
#! /bin/sh
echo "welcome to backup pro"
echo -e "\n 1:Full \n 2:Incremental"
echo "Enter your choice"
read choice
echo "Enter the files to be backup"
read filetype
echo "Enter the destination folder"
read destination
case $choice in
1)
echo "The selected backup type is Full backup"
echo "Backing up $filetype files.."
sleep 1
cp *.$filetype /home/uone/backup_folder
tar -zcvf archive_backup_folder.tar.gz backup_folder/ 2>full-error.log
mv archive_backup_folder.tar.gz /home/uone/backup_folder; cd /home/uone/backup_folder ; rm *.$filetype
sleep 1
tail full-error.log
break
;;
2)
echo "The backup you chose is Increment"
ls -l | awk 'END {print $9 "\t" $8}'
b=data "%H%M%S"
if [ $a -lt $b ];
then
echo "This is under construction"
fi
;;
esac
exit 0
답변1
stat
정말로 원한다면 루프를 사용하여 이 작업을 수행할 수 있지만 다음은 다음과 같습니다.find
능숙하고 한 줄로 할 수 있습니다. 스크립트를 실행할 때마다 특수 타임스탬프 파일을 생성한 다음 다음을 사용하여 해당 파일보다 최신/이전의 모든 파일을 선택할 수 있습니다.
find -name "*.$filetype" ! -newer timestamp.file
*.$filetype
그러면 패턴에 따라 이름이 지정 되고 !
요청에 따라 타임스탬프 파일보다 오래된(최신 파일 대신) 파일을 디렉터리 트리에서 모두 찾습니다 . 더 유용해 보이는 최신 파일을 원한다면 !
.
이러한 파일을 찾으면 find
"-exec"를 사용하여 해당 파일에 대해 특정 작업을 수행하도록 요구할 수 있습니다.
find -name "*.$filetype" -newer timestamp.file -exec cp '{}' "$destination" +
cp
일치하는 모든 파일을 이름이 지정된 디렉터리에 인수로 실행 하고 $destination
일치하는 모든 파일을 해당 디렉터리에 복사합니다.
각 스크립트 실행이 끝날 때 다음을 사용하여 비교 파일의 타임스탬프를 업데이트할 수 있습니다 touch
.
touch timestamp.file
다음번에 사용할 비교 포인트입니다. 스크립트가 실행되는 동안 파일이 수정될 수 있는 경우 더 주의해야 합니다. 처음에 타임스탬프 파일을 업데이트하고 먼저 이전 파일과 해당 속성을 복사하세요.cp -p
, 비교를 위해 사용합니다(반대의 경우도 마찬가지).
-mtime
테스트는 제목에서와 같이 현재 시간과 비교하는 데 유용할 수 있지만 find
텍스트에서 실제로 원하는 것은 스크립트의 두 실행 사이의 변경 사항을 얻는 것이라고 생각합니다.
스크립트의 압축, 사용자 상호 작용 등은 변경되지 않고 그대로 유지될 수 있습니다. 하위 디렉터리가 아닌 현재 디렉터리의 파일만 필요한 경우 -maxdepth 1
.