2010-02-10 46 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無法正常顯示的文件,但它仍然是存在的)。