如何通过删除字符或字符串来重命名多个文件?

Pau*_*aul 30 rename

作为我上一个问题的后续行动,如果我有多个表单文件

sw.ras.001
sw.ras.002
sw.ras.003
…
Run Code Online (Sandbox Code Playgroud)

我可以使用什么命令来删除ras.所有文件中间的 ?

Kev*_*vin 45

您可以通过对最后一个问题的任一答案进行相当小的修改来做到这一点:

rename s/ras\.// sw.ras.*
Run Code Online (Sandbox Code Playgroud)

或者

for file in sw.ras.*; do
    mv "$file" "${file/ras./}"
done
Run Code Online (Sandbox Code Playgroud)

解释:

rename是一个perl脚本,它接受一个perl正则表达式和一个文件列表,依次将正则表达式应用于每个文件的名称,并将每个文件重命名为应用正则表达式的结果。在我们的例子中,按字面ras匹配并\.匹配一个字面量..单独表示除换行符以外的任何字符),并且它不替换任何内容。

for循环需要,与开头的文件sw.ras.对他们(标准壳水珠)和循环。${var/search/replace}搜索$varsearch和替换第一次出现用replace,所以${file/ras./}回报率$file与第一ras.去除。因此,该命令将文件重命名为相同的名称减去ras.. 请注意,此搜索和替换.是按字面意思理解的,而不是特殊字符。


ale*_*exg 16

另一种选择是使用 mmv(Mass MoVe 和重命名):

mmv '*ras.*' '#1#2'
Run Code Online (Sandbox Code Playgroud)

不要忘记在您的模式周围使用单引号,否则星星将在外壳级别扩展。

该实用程序并不总是可用,但如果不可用,您可以使用以下命令安装它:

sudo apt-get install mmv
Run Code Online (Sandbox Code Playgroud)

请参阅此处的手册页。

  • 这是一个很棒的工具! (2认同)

Chr*_*own 5

在任何符合POSIX的壳(bashdashksh等):

for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
    mv "${file}" "${file/ras\./}"
done
Run Code Online (Sandbox Code Playgroud)

或与rename

rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
Run Code Online (Sandbox Code Playgroud)