根据子串匹配删除文件

根据子串匹配删除文件

问题描述:

在文件夹中有文件,例如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 

这在清单没有今天的日期戳中所有文件的文件。现在我必须删除列出的文件。请帮助我了解如何删除文件。

你有一些小错误。在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。

我想你想使用find命令,它会检查时间戳你的选择,即

rm `find /data -ctime +1` 

这将删除/谁的状态改为24个或更多的数据全部罚款小时前

有很多方法可以使用查找来检查时间戳。

+1

这将根据修改时间删除文件,但在这种情况下一个可随时修改文件。所以这个查询不会给出正确的结果 – user680204 2012-04-18 05:38:52

+0

-1:不回答这个问题。 – 2012-04-18 06:12:35

这里的另一种选择:

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

错误是:

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>