根据子串匹配删除文件
在文件夹中有文件,例如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个或更多的数据全部罚款小时前
有很多方法可以使用查找来检查时间戳。
这里的另一种选择:
find folder -type f -not -name '*'$(date +"%d%h%Y")'*' -delete
其中,“文件夹”是包含要删除文件的目录。
此查询帮助很大。唯一的问题是如果文件夹中没有文件,那么它删除文件夹本身。它不应该删除文件夹和文件是18APR2012格式。只是帮助我出 – user680204 2012-04-18 06:20:42
@ 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>
这将根据修改时间删除文件,但在这种情况下一个可随时修改文件。所以这个查询不会给出正确的结果 – user680204 2012-04-18 05:38:52
-1:不回答这个问题。 – 2012-04-18 06:12:35