bash - 如何从文件名中删除括号中的字符?

标签 bash shell text

我有一个以下形式的文件名列表:

Filename (region).gba

我想将它们全部重命名,而不使用 (region) 标签。

如何使用标准命令行工具执行此操作?

最佳答案

尝试:

for f in *'('*')'*; do mv -i "$f" "${f/(*)/}"; done

或者,对于那些喜欢将命令分布在多行中的人:

for f in *'('*')'*
do
   mv -i "$f" "${f/(*)/}"
done

它是如何工作的

  • for f in *'('*')'*;做

    这将启动一个循环,遍历名称中包含 ( 后跟 ) 的所有文件。

  • mv -i "$f""${f/(*)/}"

    这会重命名这些文件,删除括号以及括号之间的所有内容。

    “${f/(*)/}” 是称为模式替换的 shell 功能的示例。它查找出现的 glob (*) 并将其替换为空字符串。有关更多详细信息,请参阅 man bash

    -i 选项告诉 mv 不要在没有询问的情况下覆盖目标文件。这是可选的。您可能更愿意制作备份副本。请参阅 man mv 了解更多选项。

  • 完成

    这表示循环结束。

示例

让我们从包含这些文件的目录开始:

$ ls -1
Filename (region) 2.gba
Filename (region).gba

现在,让我们运行我们的命令:

$ for f in *'('*')'*; do mv -i "$f" "${f//(*)/}"; done

在我们的命令之后,文件具有以下名称:

$ ls -1
Filename  2.gba
Filename .gba

关于bash - 如何从文件名中删除括号中的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53806406/

相关文章:

bash - 解析 bash 中的 getopt

bash - 查找和替换文件中的单词

node.js - 是否有任何标准警告(stdwarn),如 stdout 和 stderr?

git - 突然无法创建本地/远程 git 分支

linux - 如何获取本地主机的IP地址

linux - bash "echo"包括中间创建文件的 ">"- 请解释

python - Python 中的 Word Mover 距离

java - 如何将时间转换为字符串或整数

android - 如何在 Canvas 上使用默认的 Android 字体绘图?

Bash 3.2 的逻辑或 || 行为算术表达式中的运算符