如何 scp/tar 特定日期之間的檔案?

如何 scp/tar 特定日期之間的檔案?

我需要在兩個 suse 伺服器之間複製資料庫日誌文件,我只對 2013 年 3 月 10 日至 2013 年 3 月 13 日之間的文件感興趣

需要在複製之前壓縮文件,因此我對它們進行 tar 和 scp。目前我正在使用tar -cvzf /tmp/saas_archive_logs.tar.gz /var/lib/edumate/backup/archive_logs/db2inst1/SAAS --newer-mtime=2013-03-10它為我提供從 2013 年 3 月 10 日至今的所有文件。但我不需要全部。我沒有找到任何 tar 開關。

答案1

正如 Bichoy 所指出的,您可以使用該find命令來尋找具有特定存取、建立和修改時間的檔案。然而 -mtime 以 24 小時為增量進行偏移,並且並不總是方便計算,除非您想要特定數量的「天」前的內容。您需要將其與-daystart“四捨五入”合併到當天的開始時間。

我認為在您的情況下更方便的是 -newermt 選項,它採用日期字串(而不是像大多數 -newerXY 版本那樣的參考檔案的名稱)

find將其與的-print0選項結合起來處理名稱中帶有空格的文件,並且可以選擇-type f在您感興趣的時間段內不獲取任何目錄:

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | xargs -0 tar -cvzf /tmp/saas_archive_logs.tar.gz 

這有一個大問題:如果找到的檔案數量變得太長,將根據需要多次xargs調用其命令(在本例中) ,以適應命令列上的參數,而命令列上的參數不是無限的。為了避免這種情況,我總是使用,它從標準輸入讀取檔案名稱。使用參數獲取 POSIX tar 文件,在您的情況下,您需要透過管道傳輸輸出以獲得所需的結果:tarxargscpio--format=ustargzip

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | cpio --create --null  --format=ustar \
   | gzip > /tmp/saas_archive_logs.tar.gz

答案2

您可以檢查該find命令以獲取需要去皮的文件清單。您可以使用普通-atime, -btime, -mtime... 參數與-not參數組合來指定開始和結束日期(精確到秒)。然後,您可以將輸出透過管道傳輸到xargs,然後再傳輸到tarfind有關時間參數的詳細信息,請查看 的手冊頁。

更新: 正如 Anthon 所建議的,您可以使用 +/- 修飾符來-mtime指定週期,而不使用-not。這是一個例子:

find . -mtime -5d2h3m10s -mtime +4d0h15m20s -print0 | xargs -0 tar cjvf mytar.tar.bz2

其中d, h, m, s對應於天、小時、分鐘分別。這將給出更新於5d2h3m10s和舊於的文件4d0h15m20s

相關內容