2010-02-10 42 views
1

我刚才写的备份脚本:不可删除文件,因为备份脚本

#!/usr/bin/bash 

# the number of days to do the backup for. 
days=5; 

# the files to backup. 
location[0]='/opt/aDirectory/' 
location[1]='/extra/anotherDirectory/' 

# the location to copy the file to 
copyLocation='/users/JoeBlow/Backup/backup-'$(date | tr ' ' '-') 

# Log stuff 
mkdir $copyLocation 
echo "made backup for last $days">>$copyLocation/log 

for loc in ${location[*]} 
do 
     echo "made backup of $loc" >> $copyLocation/log 
done 

echo "Errors and Warnings from find and cp" >> $copyLocation/log 

# preform the back up 
for loc in ${location[*]} 
do 
     for toBack in `find $loc \! -name '*.class' -mtime -$days \! -type d -print 2>> $copyLocation/log` 
     do 
       temp=${copyLocation}$(dirname $toBack) 
       mkdir -p $temp 2>> $copyLocation/log 
       cp $toBack $temp 2>> $copyLocation/log 
     done 
done 

但它引起了我的悲伤。

当我测试它时,我达到了我的磁盘配额。我以为没有问题,我只会rm -r,我创建的目录,明确了一些空间,然后再试一次。不。不起作用。我得到这个错误;

% rm -r backup-Wed-Feb-10-16\:58\:59-EST-2010/ 
rm: Unable to remove directory backup-Wed-Feb-10-16:58:59-EST-2010//direcotry/something: File exists 
.... 

权限问题权限?错误。

我cd到该目录中的最低位置,并且有一个非常大的隐藏文件。所以我rm吧。它允许删除它,但将一个新文件放在目录中,名称略有不同。什么是锣?

两个问题:

1我的备份脚本有什么问题吗?

2为什么我不能删除该文件?

+2

是您的脚本仍在运行? –

+0

...而且是非常大的文件,名为.nfsXXXX? –

+0

你应该做'find ... |同时读取-r toBack而不是'for ... $(find ...)'以防在名称中包含空格的文件。查看'date --rfc-3339 = date'(或= seconds)获取可排序的日期格式。 –

回答

1

如果没有更多信息,我会立刻出去:如果有一点危险,您的脚本是正确的。它试图将许多文件复制到您的备份区域,但由于没有足够的空间而卡住。当你删除一个大文件时,你释放了足够的空间让它复制一些更多的文件。它可以尽可能快地删除它们。

我建议你杀死进程,清除备份区域,并在脚本中放入一个空格检查。

+0

相当肯定,它不再运行。我怎么能证实这一点? – sixtyfootersdude

+0

其实你是对的。我不知道它是如何开始在后台运行的(反馈?)。我没有把它放到后台,但是当我运行ps时,有两个脚本运行的实例。杀死他们,然后才能删除该文件。我只是想不通剧本如何混进后台... – sixtyfootersdude

+0

至于它是如何钻进后台(如果那是真的在那里was--你尝试FG?)我不知道,但我正在学习强大的脚本的安全措施,并观察失控的迹象。 – Beta

1

在某些环境下,rm被别名为支持取消删除的内容,尝试从自己保存用户。我想知道这是否可能?你能重复实验既

/bin/rm -r backup-Wed-Feb-10-16\:58\:59-EST-2010/ 

或可能

/bin/rm -rf backup-Wed-Feb-10-16\:58\:59-EST-2010/ 

,并让我们知道结果?

+0

'/ bin/rm'不存在。我的RM是在/ usr/bin中/ RM, – sixtyfootersdude

+0

OK,然后尝试'在/ usr/bin中/ rm' –

1

什么是该目录中的文件系统类型?我看到区域设置和NTFS-3G通往“文件存在”错误引用(NTFS-3G无法正常显示的文件,但它仍然是存在的)。