根据子串匹配删除文件

时间:2012-04-17 13:59:04

标签: linux unix unix-timestamp

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

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

4 个答案:

答案 0 :(得分:2)

这是另一种选择:

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

其中“folder”是包含要删除的文件的目录。

答案 1 :(得分:0)

你有一些小错误。在ls行中它应该UPDATE而不是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

请注意,我还为ls添加了“-1”。

答案 2 :(得分: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> 

答案 3 :(得分:-1)

我认为你想使用find命令,它有一些选项可以检查你的时间戳,即

rm `find /data -ctime +1`

这将删除/ data状态在24小时前更改的所有罚款

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