在文件夹中有文件,例如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 :(得分: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来检查时间戳。