此脚本已于24小时后创建备份文件(午夜crontab),但我担心的是,在创建第一个tar(首次查找)时,正在创建大量“”文件,所以当执行第二次查找,它将删除比第一次更多的文件,因此删除的文件将超过备份。
2014年2月4日编辑的脚本,专注于删除临时文件中列出的文件的循环
#!/bin/sh
DATE=`date '+%Y%m%d'`
LOCATION=/home/see/rbirun/send/VPN/Mobile/
FILE="cdr_backup_${DATE}.tar.gz"
TEMPFILE="tempfile_${DATE}"
ERROR="Error:Tar file not created nor removed the source call records"
cd "${LOCATION}"
find . -name 'VPN_CALLRECORD*' -type f -ctime 1 -print > ${TEMPFILE}
tar -czf ${FILE} -T ${TEMPFILE}
if [ -f $FILE ];
then
number=$(more ${TEMPFILE} |wc -l)
echo "$DATE:Number of files backed up-->$number ">>log_after_cdr_backup.txt
while IFS= read -r line
do
rm -f $line
done < "${TEMPFILE}"
else
echo "$DATE:$ERROR">>log_after_cdr_backup.txt
fi
有没有办法确保删除相同的源备份?也许使用'xargs'?
提前感谢您的宝贵帮助
答案 0 :(得分:0)
如果您有足够的空间,首先将找到的文件移动到工作文件夹中,然后在备份后删除工作文件夹。
答案 1 :(得分:0)
您的问题是您运行find
两次。在第一次调用和第二次调用之间可能发生任何事情。
做这样的事情:
#!/bin/sh
DATE=`date '+%Y%m%d'`
FILE="cdr_backup_${DATE}.tar.gz"
DESTINATION=/root/patrick_temp/
ERROR="Tar file has not been created nor removed the source call records"
BACKUP_FILES=$(find . -name 'VPN_CALLRECORD*' -type f -ctime 1 -print)
tar -czvf ${FILE} ${BACKUP_FILES}
if [ -f $FILE ];
then
mv cdr_backup* ${DESTINATION}
rm -rf ${BACKUP_FILES}
else
echo $ERROR
fi
如果您要备份 LOTS 文件,可以将文件名写入临时文件,使用该文件进行tar调用,然后使用循环删除列出的所有文件在临时文件中。
根据您最近的更新进行编辑。
#!/bin/sh
DATE=`date '+%Y%m%d'`
LOCATION=/home/see/rbirun/send/VPN/Mobile/
FILE="cdr_backup_${DATE}.tar.gz"
# use mktemp to make the temp file. This is more secure and better practice.
TEMPFILE=$(mktemp) # --tmpdir lets you place the created temp file wherever you need it
ERROR="Error:Tar file not created nor removed the source call records"
cd "${LOCATION}"
find . -name 'VPN_CALLRECORD*' -type f -ctime 1 -print > ${TEMPFILE}
tar -czf ${FILE} -T ${TEMPFILE}
# first, cleanup temps
# no need for `more` here. Also, `cat` is more typically used when this is needed
number=$(wc -l ${TEMPFILE})
echo "$DATE:Number of files backed up-->$number ">>log_after_cdr_backup.txt
for line in $(cat ${TEMPFILE})
do
rm -f $line
done
rm ${TEMPFILE}
# now process activity
if [ ! -f $FILE ];
then
echo "$DATE:$ERROR">>log_after_cdr_backup.txt
exit 1
fi
我希望这能解决你的问题。