Bash 大括号扩展以删除部分文件名

6 bash string brace-expansion syntax

是否可以使用 bash 大括号扩展删除而不是将子字符串添加到文件名中?

考虑以下场景,可以使用以下技术为文件名添加后缀:

mv offlineimap.conf{,.minimal}
Run Code Online (Sandbox Code Playgroud)

它所做的是重命名offlineimap.confofflineimap.conf.minimal这非常方便,尤其是。用于制作备份文件(例如 swith.bak扩展名)。

但是也可以从给定的文件名中减去子字符串,如下所示:

mv offlineimap.conf.minimal{,-minimal}
Run Code Online (Sandbox Code Playgroud)

这里我用-一个假设的特殊字符来减去子串。

我希望第二种技术能够从现有文件的名称中offlineimap.conf删除.minimal后缀。

Joh*_*024 14

要使用大括号命令删除后缀,例如.minimal从文件中删除后缀offlineimap.conf.minimal,请使用:

mv offlineimap.conf{.minimal,}
Run Code Online (Sandbox Code Playgroud)

更多关于大括号扩展

这里的想法是大括号扩展使用大括号之间以逗号分隔的字符串列表创建一系列字符串:

$ echo a{b,c}
ab ac
Run Code Online (Sandbox Code Playgroud)

在您第一次使用时,两个字符串中的第一个为空:

$ echo a{,c}
a ac
Run Code Online (Sandbox Code Playgroud)

在所需的解决方案中,我们将其切换为两个字符串中的第二个为空:

$ echo a{b,}
ab a
Run Code Online (Sandbox Code Playgroud)

或者:

$ echo offlineimap.conf{.minimal,}
offlineimap.conf.minimal offlineimap.conf
Run Code Online (Sandbox Code Playgroud)

  • @Chinggis6 大括号扩展只是按顺序重复字符串与`{...}` 中的不同部分。`a{,b,c}` 扩展为 `a ab ac` 而 `a{b,,c}` 扩展为 `ab a ac` 等。 (2认同)