Files

如何 scp/tar 特定日期之間的文件?

  • November 18, 2018

我需要在兩個 suse 伺服器之間複製數據庫日誌文件,我只對 10.3.2013 - 13.3.2013 之間的文件感興趣

需要在複製之前壓縮文件,所以我將它們 tar 和 scp。目前我正在使用tar -cvzf /tmp/saas_archive_logs.tar.gz /var/lib/edumate/backup/archive_logs/db2inst1/SAAS --newer-mtime=2013-03-10它給我從 10.3.2013 到現在的所有文件。但我不需要所有這些。而且我沒有找到任何焦油開關。

正如 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 文件,在您的情況下,您需要通過管道傳輸輸出以獲得所需的結果:tar``xargs``cpio``--format=ustar``gzip

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

引用自:https://unix.stackexchange.com/questions/72142