我有一个以下形式的文件名列表:
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/