用空格重命名文件,同时保持数字不变

用空格重命名文件,同时保持数字不变

我希望重命名许多文件名中包含空格的文件,同时保持数字字​​符串完整。对于所有文件来说,数字不是连续的,并且数字前后的字符串也不相同。我想让所有文件的数字前面的字符串都相同。

例如:

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

信息:

  1. (\d)\sfoo_\d(\d)\s.*_\d: 匹配您的文件名
  2. (\d):返回前面的数字
  3. $1:返回值变量2
  4. -n:用于查看prename命令的结果,删除以进行更改

看:man prename

相关内容