Bash 如何重命名多个文件?

Bash 如何重命名多个文件?,bash,file-rename,Bash,File Rename,在一个文件夹中,我有几个具有以下名称结构的文件(我只写了三个示例): 我要做的是使用BASH命令重命名文件夹中的所有文件,方法是在第一个数字代码之前删除第一个下划线和一系列零: F1_4837_blabla1.doc F45_8987_blabla2.doc F168_9092_blabla3.doc 输出 参数展开 参数展开可用于替换变量的内容。在本例中,我们将模式*(0)替换为零 ${parameter/pattern/string} 模式替换。该图案被展开以产生拍子- tern与路径名扩

在一个文件夹中,我有几个具有以下名称结构的文件(我只写了三个示例):

我要做的是使用BASH命令重命名文件夹中的所有文件,方法是在第一个数字代码之前删除第一个下划线和一系列零:

F1_4837_blabla1.doc
F45_8987_blabla2.doc
F168_9092_blabla3.doc
输出 参数展开 参数展开可用于替换变量的内容。在本例中,我们将模式
*(0)
替换为零

${parameter/pattern/string}
模式替换。该图案被展开以产生拍子-
tern与路径名扩展中的相同。参数展开并
模式与其值的最长匹配将替换为
一串如果模式以/开头,则模式的所有匹配项均为
替换为字符串。通常只有第一场比赛是
替换。如果图案以#开头,则必须在开头匹配-
参数的展开值。如果模式以
%,它必须在参数的展开值末尾匹配。
如果字符串为null,则删除模式的匹配项,并且/fol-
可以省略lowing模式。如果参数为@或*,则子-
拼接操作应用于中的每个位置参数
旋转,展开就是结果列表。如果参数为
用@或*下标的数组变量,替换
操作依次应用于数组的每个成员,并且
扩展是结果列表。
扩展模式匹配 扩展模式匹配允许我们使用模式
*(0)
匹配零个或多个
0
字符。需要使用
extglob
设置启用它

如果使用shopt内置函数启用extglob shell选项,则
识别扩展模式匹配运算符。在下面
说明,模式列表是一个或多个分离模式的列表
以|的名义。复合图案可以使用以下一种或多种方法形成-
降低子模式:
?(模式列表)
匹配给定模式的零个或一个匹配项
*(图案列表)
匹配给定模式的零次或多次出现
+(图案列表)
匹配给定模式的一个或多个匹配项
@(图案列表)
匹配给定模式之一
!(图案列表)
匹配除一个给定模式之外的任何模式

查找
重命名bash命令
非常感谢!它工作得很好!我能问你另一件事吗?文件名在自然结尾“.doc”之前还包含空格和丑陋的点。除了最后一个明显带有下划线的空格和点外,我怎样才能用下划线来更改所有空格和点呢?@Marco我会添加额外的重命名:
f_new=${f/.doc/.doc}
f_new=${f_new/other/replacement}
,等等。你会发现手册是一个有用的资源。显然,这些确切的命令不起作用,你需要自己玩。
F1_4837_blabla1.doc
F45_8987_blabla2.doc
F168_9092_blabla3.doc
shopt -s extglob

for f in *; do
  echo "$f: ${f/_*(0)/}"
  # mv "$f" "${f/_*(0)/}"   # for the actual rename
done
F_001_4837_blabla1.doc: F1_4837_blabla1.doc
F_045_8987_blabla2.doc: F45_8987_blabla2.doc
F_168_9092_blabla3.doc: F168_9092_blabla3.doc