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

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

4

4 回答 4

2

这是另一种选择:

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

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

于 2012-04-17T17:31:35.817 回答
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”。

于 2012-04-17T14:10:04.057 回答
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> 
于 2012-04-18T05:52:04.427 回答
-1

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

rm `find /data -ctime +1`

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

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

于 2012-04-17T14:16:21.820 回答