如何删除符合特定数字模式的文件我现在在 MacOS 中像这样删除,
rm */sections.json.* */sections.json0* */sections.json1* all the way till 9
如何删除符合特定数字模式的文件我现在在 MacOS 中像这样删除,
rm */sections.json.* */sections.json0* */sections.json1* all the way till 9
假设您要删除
sections.json.<anything>
和sections.json<a-number-between-0-and-9>
文件¹,使用zsh
shell:使用
bash
shell(使用extglob
选项时,它实现了 ksh 扩展运算符的子集):(避免
[0-9]
在 bash 中匹配 0123456789 旁边的数百个字符)。如果范围大于 0 到 9 的个位数,则需要 zsh 的
<0-123>
十进制数匹配运算符:请注意,这也与或
<0-123>
匹配,它们也是 1 到 123 之间的数字的十进制整数表示形式。005
0000118
要排除以 0 开头的数字,可以使用
~
(except)extendedglob
运算符(0|(<1-123>~0*))
代替<0-123>
,即:* 可以是0
或 1 到 123 之间的任何十进制整数表示形式,但以0
) 开头的数字除外。为了在不使用专用运算符的情况下进行相同匹配,使用
bash -O extglob -O failglob
,您需要构建一个复杂的模式,例如:或者:
排除以 0 为前导的数字。
bash 中的另一种(强力)方法是构建一个
@(.*|0|1|2|...|122|123)
模式,你可以这样做:(
{x..y}
和array=(...)
实际上最初都来自 zsh)。在有合适的连接运算符甚至专用于使用 glob 运算符进行连接的地方,这会更容易
zsh
;您还可以使用匿名函数将数组作为其参数:现在,如果您想在数字后允许任何内容,您不能只附加
*
,就像在sections.json<1-123>*
上匹配一样,在sections.json124
上<1-123>
匹配12
,*
在 4 上匹配,您需要(|[^0-9]*)
在 zsh 中附加(或^[0-9]*
使用extendedglob
)或?([^0123456789]*)
或!([0123456789]*)
使用bash -O extglob -O failglob
以确保数字保持在 1..123 范围内。¹请注意,您的
*/sections.json1*
例如将匹配,dir/sections.json123.tar.gz
因此您不会将范围限制为 0 到 9 之间的数字。你也可以在 bash 中使用括号,例如
POSIX 可移植解决方案: