2010-02-19 29 views
0

我有一個一對bash腳本,1個轉儲mysql dbs,第二個清除舊備份從查找和抓取子集(bash)排序結果

我一直依賴日期,因此任何超過7天的文件都將被清除,並且每天創建新的備份。結果是7天前的一組備份。

那麼現在,我已經有20+ dbs 我已經把每天的工作分成每天和每週的工作。如果我繼續使用查找和日期方法,我會在過去一週失去。

問題

我如何可以按日期查找的輸出,然後清除所有,但最近7(因此,即使最近的是2個月大,但它仍然)

這是我得到的,但它不是預期的。也許使用LS可能是更好的選擇9find是使用日期爲淨化的唯一標準)

OLDFILES=`find -regex .*sql.*` 

set -- $OLDFILES 

if [ -z $1 ] 
then 
    printf "\tNo files matching purge criteria\n" | tee -a $LOGFILE 
else 
    printf "\tSQL Files being Delete from $HERE\n" | tee -a $LOGFILE 
    printf "\t\t%s\n" $OLDFILES | tee -a $LOGFILE 
fi 
# $RETAIN is the # of recent to keep 
# so I want to grab a subset from 0 to (total - retain), and purge them 
TOBURN=$(($# - $RETAIN)) 
printf " grab first %s files. %s - %s" $TOBURN $# $RETAIN 
if [ $TOBURN -gt 0 ] 
then 
    TOPURGE=("[email protected]:0:$TOBURN") 
    printf "\n\nREMOVING..\n\t\t%s\n" $TOPURGE 
fi 

現有文件

  ./webbmaster_bellarose_joomla_01-09-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-25-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-10-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-04-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-25-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-29-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-30-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-28-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-06-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-13-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-24-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-21-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-24-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-27-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-26-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-17-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-03-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-21-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-20-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-16-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-31-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-11-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-05-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-14-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-22-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-12-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-17-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-18-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-20-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-08-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-22-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-27-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-23-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-07-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-26-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-19-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-29-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-15-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-28-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-01-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-18-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-02-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-23-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-19-2009.sql.gz 

目標吹掃殘餘(我想要在變量中設置簡單的rm -f $ var)

  ./webbmaster_bellarose_joomla_01-09-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-25-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-10-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-04-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-30-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-28-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-06-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-13-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-21-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-24-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-27-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-17-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-03-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-21-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-20-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-16-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-31-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-11-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-05-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-14-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-22-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-12-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-17-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-18-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-20-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-08-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-22-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-23-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-07-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-26-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-19-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-29-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-15-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-01-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-18-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-02-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-19-2009.sql.gz 

(日期1/23 - 1/29是原封不動)

回答

4

請您自己(和其他人)大張大事,並以ISO-8601格式(即YYYY-MM-DD)開始寫作日期。

E.g.而不是

./webbmaster_bellarose_joomla_12-29-2009.sql.gz 

你會

./webbmaster_bellarose_joomla_2009-12-29.sql.gz 

這樣做有many benefits最重要的是在這裏,時間和字母順序變得相同。無需查找,只列出文件,倒序,刪除第7行,並刪除任何剩餘文件:

ls *sql* | tac | sed 1,7d | tr '\012' '\000' | xargs -0 --no-run-if-empty rm 

更新:你說的「前進」是什麼意思?由於FAS我可以告訴我的解決方案解決您的問題100%:

/tmp/so>cat existing_files 
./webbmaster_bellarose_joomla-2009-12-17.sql.gz 
./webbmaster_bellarose_joomla-2009-12-18.sql.gz 
./webbmaster_bellarose_joomla-2009-12-19.sql.gz 
./webbmaster_bellarose_joomla-2009-12-20.sql.gz 
./webbmaster_bellarose_joomla-2009-12-21.sql.gz 
./webbmaster_bellarose_joomla-2009-12-22.sql.gz 
./webbmaster_bellarose_joomla-2009-12-23.sql.gz 
./webbmaster_bellarose_joomla-2009-12-24.sql.gz 
./webbmaster_bellarose_joomla-2009-12-25.sql.gz 
./webbmaster_bellarose_joomla-2009-12-26.sql.gz 
./webbmaster_bellarose_joomla-2009-12-27.sql.gz 
./webbmaster_bellarose_joomla-2009-12-28.sql.gz 
./webbmaster_bellarose_joomla-2009-12-29.sql.gz 
./webbmaster_bellarose_joomla-2009-12-30.sql.gz 
./webbmaster_bellarose_joomla-2009-12-31.sql.gz 
./webbmaster_bellarose_joomla-2010-01-01.sql.gz 
./webbmaster_bellarose_joomla-2010-01-02.sql.gz 
./webbmaster_bellarose_joomla-2010-01-03.sql.gz 
./webbmaster_bellarose_joomla-2010-01-04.sql.gz 
./webbmaster_bellarose_joomla-2010-01-05.sql.gz 
./webbmaster_bellarose_joomla-2010-01-06.sql.gz 
./webbmaster_bellarose_joomla-2010-01-07.sql.gz 
./webbmaster_bellarose_joomla-2010-01-08.sql.gz 
./webbmaster_bellarose_joomla-2010-01-09.sql.gz 
./webbmaster_bellarose_joomla-2010-01-10.sql.gz 
./webbmaster_bellarose_joomla-2010-01-11.sql.gz 
./webbmaster_bellarose_joomla-2010-01-12.sql.gz 
./webbmaster_bellarose_joomla-2010-01-13.sql.gz 
./webbmaster_bellarose_joomla-2010-01-14.sql.gz 
./webbmaster_bellarose_joomla-2010-01-15.sql.gz 
./webbmaster_bellarose_joomla-2010-01-16.sql.gz 
./webbmaster_bellarose_joomla-2010-01-17.sql.gz 
./webbmaster_bellarose_joomla-2010-01-18.sql.gz 
./webbmaster_bellarose_joomla-2010-01-19.sql.gz 
./webbmaster_bellarose_joomla-2010-01-20.sql.gz 
./webbmaster_bellarose_joomla-2010-01-21.sql.gz 
./webbmaster_bellarose_joomla-2010-01-22.sql.gz 
./webbmaster_bellarose_joomla-2010-01-23.sql.gz 
./webbmaster_bellarose_joomla-2010-01-24.sql.gz 
./webbmaster_bellarose_joomla-2010-01-25.sql.gz 
./webbmaster_bellarose_joomla-2010-01-26.sql.gz 
./webbmaster_bellarose_joomla-2010-01-27.sql.gz 
./webbmaster_bellarose_joomla-2010-01-28.sql.gz 
./webbmaster_bellarose_joomla-2010-01-29.sql.gz 
/tmp/so>cat targets_for_purging 
./webbmaster_bellarose_joomla-2009-12-17.sql.gz 
./webbmaster_bellarose_joomla-2009-12-18.sql.gz 
./webbmaster_bellarose_joomla-2009-12-19.sql.gz 
./webbmaster_bellarose_joomla-2009-12-20.sql.gz 
./webbmaster_bellarose_joomla-2009-12-21.sql.gz 
./webbmaster_bellarose_joomla-2009-12-22.sql.gz 
./webbmaster_bellarose_joomla-2009-12-23.sql.gz 
./webbmaster_bellarose_joomla-2009-12-24.sql.gz 
./webbmaster_bellarose_joomla-2009-12-25.sql.gz 
./webbmaster_bellarose_joomla-2009-12-26.sql.gz 
./webbmaster_bellarose_joomla-2009-12-27.sql.gz 
./webbmaster_bellarose_joomla-2009-12-28.sql.gz 
./webbmaster_bellarose_joomla-2009-12-29.sql.gz 
./webbmaster_bellarose_joomla-2009-12-30.sql.gz 
./webbmaster_bellarose_joomla-2009-12-31.sql.gz 
./webbmaster_bellarose_joomla-2010-01-01.sql.gz 
./webbmaster_bellarose_joomla-2010-01-02.sql.gz 
./webbmaster_bellarose_joomla-2010-01-03.sql.gz 
./webbmaster_bellarose_joomla-2010-01-04.sql.gz 
./webbmaster_bellarose_joomla-2010-01-05.sql.gz 
./webbmaster_bellarose_joomla-2010-01-06.sql.gz 
./webbmaster_bellarose_joomla-2010-01-07.sql.gz 
./webbmaster_bellarose_joomla-2010-01-08.sql.gz 
./webbmaster_bellarose_joomla-2010-01-09.sql.gz 
./webbmaster_bellarose_joomla-2010-01-10.sql.gz 
./webbmaster_bellarose_joomla-2010-01-11.sql.gz 
./webbmaster_bellarose_joomla-2010-01-12.sql.gz 
./webbmaster_bellarose_joomla-2010-01-13.sql.gz 
./webbmaster_bellarose_joomla-2010-01-14.sql.gz 
./webbmaster_bellarose_joomla-2010-01-15.sql.gz 
./webbmaster_bellarose_joomla-2010-01-16.sql.gz 
./webbmaster_bellarose_joomla-2010-01-17.sql.gz 
./webbmaster_bellarose_joomla-2010-01-18.sql.gz 
./webbmaster_bellarose_joomla-2010-01-19.sql.gz 
./webbmaster_bellarose_joomla-2010-01-20.sql.gz 
./webbmaster_bellarose_joomla-2010-01-21.sql.gz 
./webbmaster_bellarose_joomla-2010-01-22.sql.gz 
/tmp/so>sed 's/\(.\{29\}\)_\(..-..\)-\(....\)/\1-\3-\2/' existing_files | sort > existing_files.8601 
/tmp/so>sed 's/\(.\{29\}\)_\(..-..\)-\(....\)/\1-\3-\2/' targets_for_purging | sort > targets_for_purging.8601 
/tmp/so>mkdir files 
/tmp/so>cd files 
/tmp/so/files>xargs touch < ../existing_files.8601 
/tmp/so/files>ls -1 
webbmaster_bellarose_joomla-2009-12-17.sql.gz 
webbmaster_bellarose_joomla-2009-12-18.sql.gz 
webbmaster_bellarose_joomla-2009-12-19.sql.gz 
webbmaster_bellarose_joomla-2009-12-20.sql.gz 
webbmaster_bellarose_joomla-2009-12-21.sql.gz 
webbmaster_bellarose_joomla-2009-12-22.sql.gz 
webbmaster_bellarose_joomla-2009-12-23.sql.gz 
webbmaster_bellarose_joomla-2009-12-24.sql.gz 
webbmaster_bellarose_joomla-2009-12-25.sql.gz 
webbmaster_bellarose_joomla-2009-12-26.sql.gz 
webbmaster_bellarose_joomla-2009-12-27.sql.gz 
webbmaster_bellarose_joomla-2009-12-28.sql.gz 
webbmaster_bellarose_joomla-2009-12-29.sql.gz 
webbmaster_bellarose_joomla-2009-12-30.sql.gz 
webbmaster_bellarose_joomla-2009-12-31.sql.gz 
webbmaster_bellarose_joomla-2010-01-01.sql.gz 
webbmaster_bellarose_joomla-2010-01-02.sql.gz 
webbmaster_bellarose_joomla-2010-01-03.sql.gz 
webbmaster_bellarose_joomla-2010-01-04.sql.gz 
webbmaster_bellarose_joomla-2010-01-05.sql.gz 
webbmaster_bellarose_joomla-2010-01-06.sql.gz 
webbmaster_bellarose_joomla-2010-01-07.sql.gz 
webbmaster_bellarose_joomla-2010-01-08.sql.gz 
webbmaster_bellarose_joomla-2010-01-09.sql.gz 
webbmaster_bellarose_joomla-2010-01-10.sql.gz 
webbmaster_bellarose_joomla-2010-01-11.sql.gz 
webbmaster_bellarose_joomla-2010-01-12.sql.gz 
webbmaster_bellarose_joomla-2010-01-13.sql.gz 
webbmaster_bellarose_joomla-2010-01-14.sql.gz 
webbmaster_bellarose_joomla-2010-01-15.sql.gz 
webbmaster_bellarose_joomla-2010-01-16.sql.gz 
webbmaster_bellarose_joomla-2010-01-17.sql.gz 
webbmaster_bellarose_joomla-2010-01-18.sql.gz 
webbmaster_bellarose_joomla-2010-01-19.sql.gz 
webbmaster_bellarose_joomla-2010-01-20.sql.gz 
webbmaster_bellarose_joomla-2010-01-21.sql.gz 
webbmaster_bellarose_joomla-2010-01-22.sql.gz 
webbmaster_bellarose_joomla-2010-01-23.sql.gz 
webbmaster_bellarose_joomla-2010-01-24.sql.gz 
webbmaster_bellarose_joomla-2010-01-25.sql.gz 
webbmaster_bellarose_joomla-2010-01-26.sql.gz 
webbmaster_bellarose_joomla-2010-01-27.sql.gz 
webbmaster_bellarose_joomla-2010-01-28.sql.gz 
webbmaster_bellarose_joomla-2010-01-29.sql.gz 
/tmp/so/files>ls *sql* | tac | sed 1,7d | tr '\012' '\000' | xargs -0 --no-run-if-empty rm 
/tmp/so/files>ls -1 ./* 
./webbmaster_bellarose_joomla-2010-01-23.sql.gz 
./webbmaster_bellarose_joomla-2010-01-24.sql.gz 
./webbmaster_bellarose_joomla-2010-01-25.sql.gz 
./webbmaster_bellarose_joomla-2010-01-26.sql.gz 
./webbmaster_bellarose_joomla-2010-01-27.sql.gz 
./webbmaster_bellarose_joomla-2010-01-28.sql.gz 
./webbmaster_bellarose_joomla-2010-01-29.sql.gz 
/tmp/so/files>comm -3 ../existing_files.8601 ../targets_for_purging.8601 
./webbmaster_bellarose_joomla-2010-01-23.sql.gz 
./webbmaster_bellarose_joomla-2010-01-24.sql.gz 
./webbmaster_bellarose_joomla-2010-01-25.sql.gz 
./webbmaster_bellarose_joomla-2010-01-26.sql.gz 
./webbmaster_bellarose_joomla-2010-01-27.sql.gz 
./webbmaster_bellarose_joomla-2010-01-28.sql.gz 
./webbmaster_bellarose_joomla-2010-01-29.sql.gz 
/tmp/so/files> 
+0

偉大的技巧前進。 – Eddie 2010-02-20 03:30:52

0
OLDIFS="$IFS" 
IFS=$'\n' 
topurge=($(find -mindepth 1 -printf "%[email protected] %P\n" | sort -n -r | cut -d' ' -f 2- | tail -n +7)) 
IFS="$OLDIFS" 
+0

這版畫最多1個文件在我的測試中,它似乎並沒有是最古老的或最新的,從一堆只是一個隨機文件。 – Eddie 2010-02-20 01:06:51

+0

這將是因爲它會創建一個數組。在「$ {topurge [@]}」中嘗試使用f;做回聲「$ f」;完成'而不是。 – 2010-02-20 01:10:43

0

這裏有一個想法:

oldest_to_keep=`find . -name \*.sql | xargs \ls -1rc | tail -7 | head -1` 
find . -name \*.sql -not -samefile $oldest_to_keep -not -newer $oldest_to_keep 

當第二個find應該有-exec rm \{\} ;如果你說服自己這個是理智的。 :)

+0

這是列出我最近的7個測試。 ..但一個好的開始,我可以與/可以合作。 – Eddie 2010-02-20 01:06:12

2

如果這些文件都在一個目錄中(即,您不需要使用find來遞歸子目錄),則可以使用ls(1)的-t參數按順序排序文件列表,然後刪除尾部的前7個條目(1)。

rm -f $(ls -t *sql* | tail -n +8) 

[編輯:我的情況下,加入在-f空列表取代產生]

或在環...

ls -t *sql* | tail -n +8 | while read file 
    echo "Purging: $file" 
    rm "$file" 
done 

至尾的參數是8,因爲你希望它從第8行開始拖尾(即放棄第7行)。

刪除文件後,您可以燒掉剩下的東西。

+0

是的,我想保存最近的7個,不能刪除。對於任何可能意味着刪除0或63個文件的提供n目錄。 – Eddie 2010-02-20 01:13:45

+0

這是保留最新的7.它刪除了最近的一次7.關於刪除前七個條目的註釋是將它們從要清除的文件列表中刪除(即保留它們)。 – camh 2010-02-20 01:20:12