我必须删除文件名具有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
"