删除文件名中带有时间戳的文件夹中的所有文件

删除文件名中带有时间戳的文件夹中的所有文件

我必须删除文件名具有fcrjlog-11-21-2019-1.txt格式的文件夹中的所有文件。我想删除文件夹中具有此类文件名的所有文件。

答案1

 find . ! -type d -name 'fcrjlog-??-??-????-?.txt' -delete

(如果您不支持非标准扩展,请替换-delete为)。-exec rm -f {} +find-delete

?是通配符运算符,代表任何单个字符。替换为[[:digit:]]仅匹配十进制数字字符 (0123456789)。

! -type d排除类型的文件目录-delete除非它们是空的,否则无法删除),您可以替换为-type f更具限制性(仅包括常规的文件(所有其他类型的文件除外,包括符号链接、目录、套接字、fifo、设备...)。 GNUfind还支持-xtype f选择确定为的文件常规的符号链接解析后。

替换fcrjlog*可匹配任意数量的字符,或?*任何非空字符序列,或[!.]*任何第一个不是的非空字符序列.(以排除隐藏文件)。

答案2

通常会显示一些您已经尝试过的内容 - 这样您会得到更多回复。对于这个问题,你需要查找正则表达式,并理解一些概念。我假设你的时间戳中的“x”是数字?如果是这样,这个正则表达式将帮助您开始:

/tmp>ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$"
test-12-12-1234-9.txt

/tmp>rm $(ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$")

分解各个部分:

"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{4}  -- Exactly four numeric characters
 -         -- A literal dash "-"
 [0-9]     -- One numeric character
 .         -- Any character.  Use \. to insist on a dot
 txt       -- The literal string "txt"
 $         -- An anchor that means the txt has to be at the end of the line
"

相关内容