2012-04-17 89 views
1

在文件夾中有文件,例如A_17APR2012.csv。我的要求是刪除所有文件,除了今天的時間戳根據子串匹配刪除文件

我試着這樣做可以列出所有沒有今天的日期戳

#!/bin/ksh 

DATE=`date +"%d%h%Y"` 
DIR=/data/rfs/ 
FOLDER=Test 
FILE=$DIR$FOLDER 

UDATE="$(echo $DATE | tr '[a-z]' '[A-Z]')" 

ls $FILE | grep -v "${UDATE}" 

exit 0 

這在清單沒有今天的日期戳中所有文件的文件。現在我必須刪除列出的文件。請幫助我瞭解如何刪除文件。

回答

0

你有一些小錯誤。在ls行中,它應該通過UPDAD而不是UPADTE。另外,可能UPPDATE行應該與UPDATE和``(反引號)。修復後的腳本是:

#!/bin/ksh 

DATE=`date +"%d%h%Y"` 
DIR=. 
FOLDER= 
FILE=$DIR$FOLDER 

UPDATE=`echo $DATE | tr [a-z] [A-Z]` 

ls -1 $FILE | grep -v "$UPDATE" 

exit 0 

請注意,我還添加了「-1」給ls。

-1

我想你想使用find命令,它會檢查時間戳你的選擇,即

rm `find /data -ctime +1` 

這將刪除/誰的狀態改爲24個或更多的數據全部罰款小時前

有很多方法可以使用查找來檢查時間戳。

+1

這將根據修改時間刪除文件,但在這種情況下一個可隨時修改文件。所以這個查詢不會給出正確的結果 – user680204 2012-04-18 05:38:52

+0

-1:不回答這個問題。 – 2012-04-18 06:12:35

2

這裏的另一種選擇:

find folder -type f -not -name '*'$(date +"%d%h%Y")'*' -delete 

其中,「文件夾」是包含要刪除文件的目錄。

+0

此查詢幫助很大。唯一的問題是如果文件夾中沒有文件,那麼它刪除文件夾本身。它不應該刪除文件夾和文件是18APR2012格式。只是幫助我出 – user680204 2012-04-18 06:20:42

+0

@ user680204,給這個版本試試看,讓我知道它是否解決了您的問題。 – 2012-04-19 00:32:32

0

錯誤是:

UPPDATE= echo $DATE | tr [a-z] [A-Z] 

你需要將其更改爲:

UPPDATE="$(echo $DATE | tr '[a-z]' '[A-Z]')" 

完美的作品

pearl.388> cat temp2.sh 
#!/bin/ksh 

DATE=`date +"%d%h%Y"` 
DIR=data/ 
FOLDER=Test 
FILE=$DIR$FOLDER 

UPPDATE="$(echo $DATE | tr '[a-z]' '[A-Z]')" 

ls -1 $FILE | grep -v "^${UPPDATE}" 

exit 0 
pearl.389>