是否可以在同一个 shell 命令中以“同步”方式使用重复的 glob 表达式?

是否可以在同一个 shell 命令中以“同步”方式使用重复的 glob 表达式?

抱歉这个糟糕的标题。我正在尝试做的事情如下。我有一个目录,其中包含(比如说)1000 个文件,其名称格式为Foo_bar_1,...,Foo_bar_1000.我想从每个文件名中删除“栏”。对于单个文件,这很容易,例如:mv Foo_bar_1 Foo_1.

显然我可以使用循环以这种方式处理所有文件。但是,我想知道是否有一种简单的方法可以使用mv正则表达式命令在不循环的情况下执行此操作。我可以将任何源文件与表达式匹配Foo_bar_*。现在有什么方法可以“访问”与 匹配的文本吗*

我想写的是类似的东西mv Foo_bar_* Foo_*,其中目标文件中的第二个*应该等于*源文件中匹配的字符串。如何才能做到这一点?

答案1

通配符由您的 shell 扩展命令运行。所以这将被执行:

mv Foo_bar_1 Foo_bar_2 ... Foo_bar_1000 Foo_bar_1 Foo_bar_2 ... Foo_bar_1000

或者,如果您有类似 的文件Foo_foo_1,它们也会被添加,因为它们与第二个通配符匹配。

所以不,这是不可能的。

此外,mv只接受单个目标。


你可以做一个for循环:

for f in *; do mv "$f" "${f/_bar_/_}"; done

或使用一些批量重命名工具:

Perl重命名工具:

rename 's/_bar_/_/' *

“正常”重命名工具:

rename '_bar_' '_' *

也可以看看:

相关内容