我希望重命名许多文件名中包含空格的文件,同时保持数字字符串完整。对于所有文件来说,数字不是连续的,并且数字前后的字符串也不相同。我想让所有文件的数字前面的字符串都相同。
例如:
100 foo_1.ext
200 foo_2.ext
201 foo_3.ext
重命名为
100.ext
200.ext
201.ext
答案1
你可以尝试:
for a in *.ext; do mv "$a" "${a/ */}.ext"; done
解释:
for a in *.ext
.ext
- 获取当前目录下所有带有扩展名的文件;
a/ */
- 将子字符串替换为空( ${string/substring/replacement} )。此构造获取空格(含)后的所有符号并将其删除。
。
或者如果你有具有不同扩展名的文件并且您需要处理目录中的所有文件,请尝试:
for a in *; do mv "$a" "${a/ *\./\.}"; done
Perl 重命名命令的等效命令是:
prename 's/ .*\./\./' *
例子: 文件
100 foo_1.ext
200 foo_1.ext
201 foo_3.ext
3401 txt_3.txt
将重命名为
100.ext
200.ext
201.ext
3401.txt
文件名中没有空格的文件将不会被处理。
答案2
用于prename
此:
prename 's/\D*(\d*).*/$1.ext/' *.ext
对于给定的所有文件,这会将扩展正则表达式\D*\d*.*
(多个非数字后跟多个数字和名称的其余部分)替换为 包围的部分()
(即数字和扩展名)。
编辑问题后,文件名似乎以数字开头,后跟空格。这使得事情变得更加简单:
prename 's/ .*/.ext/' *.ext
答案3
可以使用 Perl 重命名(不是 Linux 重命名):
prename -n 's/(\d*)\s*foo_\d*/$1/g' /path/to/folder/*.ext
或者
prename -n 's/(\d*)\s*.*_\d*/$1/g' /path/to/folder/*.ext
示例文件名:
100 foo_2.ext
101 foo_1.ext
200 foo_234.ext
302 foo_2.ext
结果:
100.ext
101.ext
200.ext
302.ext
信息:
(\d)\sfoo_\d
或(\d)\s.*_\d
: 匹配您的文件名(\d)
:返回前面的数字$1
:返回值变量2
-n
:用于查看prename
命令的结果,删除以进行更改
看:man prename