2017-04-18 27 views
0

我目前正在研究一個腳本,用於存儲/備份我們的舊文件,以便我們在服務器上擁有更多的空間。這個腳本將被用作cronjob來每週備份這些東西。我的劇本目前看起來是這樣的:查找腳本問題 - > tar/gzip

#!/bin/bash 
currentDate=$(date '+%Y%m%d%T' | sed -e 's/://g') 
find /Directory1/ -type f -mtime +90 | xargs tar cvf - | gzip > /Directory2/Backup$currentDate.tar.gz 
find /Directory1/ -type f -mtime +90 -exec rm {} \; 

的腳本是先保存當前日期+時間戳(沒有「:」)作爲變量。之後,它會搜索超過90天的文件,並對它們進行標記並最終生成一個名爲「Backup $ currentDate.tar.gz」的gzip。 然後它應該再次找到文件並將其刪除。

但我確實在這裏有一些問題:

Directory1由多個目錄組成。它確實找到了這些文件並創建了gz文件,但是當某些文件正確壓縮(例如/ DirName1/DirName2/DirName3/File)時,其他文件直接出現在「根」目錄中。這裏可能是什麼問題?

有沒有辦法告訴腳本,只創建gz文件,如果找到文件?因爲目前,我們得到gz文件,即使沒有發現任何東西,導致空目錄。

我可以以某種方式稍後使用查找輸出(存儲變量?),以便在最後的刪除實際上只針對那些在此之前的步驟中找到的文件?因爲如果第三步需要完成,比如說一個小時,最後一步在完成後執行,那麼它可能會刪除不超過90天之前的文件,但是現在,所以它們不會被備份,但是然後刪除(非常不重要,但不是不可能)。

如果有其他任何你需要知道的,隨便問^^

問候

+0

你有GNU Tar嗎?它會爲你做的大部分。 https://www.gnu.org/software/tar/manual/ –

+0

可悲的是,我沒有,也不允許安裝它。 – Dino

+0

這是AIX嗎?什麼版本? uname -a –

回答

0

我「改寫」你原來的代碼位。我沒有AIX機器來測試任何東西,所以不要剪切和粘貼它。使用此代碼,您應該能夠解決您的問題。即:

  • 它記錄了它打算操作的文件($BFILES)。
  • 該記錄可用於檢查空的tar文件。
  • 這個記錄可以用來查看你的發現爲什麼產生「有趣」的輸出。發現xargs擊中太空角色並不令人驚訝。
  • 該記錄可用於刪除所有歸檔的文件。

作爲一個孩子,我和xargs發生了嚴重的意外,並且從此避免了這種情況。也許有一個安全的版本。

#!/bin/bash 

# I don't have an AIX machine to test this, so exit immediately until 
# someone can proof this code. 
exit 1 

currentDate=$(date '+%Y%m%d%T' | sed -e 's/://g') 

BFILES=/tmp/Backup$currentDate.files 

find /Directory1 -type f -mtime +90 -print > $BFILES 
# Here is the time to proofread the file list, $BFILES 

# The AIX page I read lists the '-L' option to take filenames from an 
# input file. I've found xargs to be sketchy unless you are very 
# careful about quoting. 

#tar -c -v -L $BFILES -f - | gzip -9 > /Directory2/Backup$currentDate.tar.gz 

# I've found xargs to be sketchy unless you are very careful about 
# quoting. I would rather loop over the input file one well quoted 
# line at a time rather than use the faster, less safe xargs. But 
# here it is. 

#xargs rm < $BFILES 
+1

太棒了,這是我需要的方式! – Dino