同时重命名多个文件

同时重命名多个文件

我有大约 180 个具有相同结构的文件:000-aaaaaaaa.txt

文件名的正则表达式:/^[0-9]{3}\-[a-zA-Z]+$/gi(3 位数字++-字母+ .txt)。

我想剪切-每个文件名中的数字部分

例如

  • 000-hello.txt->hello.txt
  • 001-world.txt->world.txt
  • 002-ubuntu.txt->ubuntu.txt
  • 003-linux.txt->linux.txt

答案1

使用重命名文件韓國

$ mmv '???-*' '#4'
       ^^^ ^    ^
       123 4    4

您还可以使用范围匹配来匹配数字:

$ mmv '[0-9][0-9][0-9]-*.txt' '#4.txt'
         ^    ^    ^   ^        ^
         1    2    3   4        4

(递归重命名文件):

$ mmv ';???-*' '#1#5'
       ^^^^ ^    ^ ^
       1234 5    1 5
  • ; 扩展到任意数量的目录(与 相同**/)。
  • * 匹配任意字符零次或多次。
  • ? 匹配任意单个字符。
  • []匹配字符列表或字符范围。
  • # 对 from 模式中的第 n 个通配符的引用。

答案2

使用基于 Perl 的rename命令:

$ rename -n 's/\d{3}-//' [0-9][0-9][0-9]-*.txt
rename(000-hello.txt, hello.txt)
rename(001-world.txt, world.txt)
rename(002-ubuntu.txt, ubuntu.txt)
rename(003-linux.txt, linux.txt)

如果文件数量足够大,使得命令超出 shell 的限制ARG_MAX,那么你可以使用

printf '%s\0' [0-9][0-9][0-9]-*.txt | xargs -0 rename -n 's/\d{3}-//'

或者

find . -maxdepth 1 -name '[0-9][0-9][0-9]-*.txt' -exec rename -n 's/\d{3}-//' {} +

请注意,[0-9][0-9][0-9]-*.txt由 shell 处理,并且需要是 shell glob 表达式而不是正则表达式。

-n一旦您确认它正在做正确的事情,就将其删除。

答案3

由于我还没有看到这里提到,你可以使用代表。虽然默认情况下未安装,但它确实支持基于正则表达式的文件重命名。您可以只执行一个正则表达式模式,如下所示:

repren --rename --from "^[0-9]{3}" --to "" --dry-run .

上述示例将删除当前目录中所有文件的文件名开头的前 3 位数字(如果它们位于文件名的开头)。它执行的操作如下:试运行尽管它无需实际执行即可向您展示它会做什么 ---dry-run一旦您确定它会按照您的意图执行,请移除该位。

repren也支持模式文件,允许您一次性进行多次替换:

repren --rename --patterns=path/to/patternfile

模式文件如下所示:

regex_1<tab_character>replacement_1
regex_2<tab_character>replacement_2

...等等。

最后,它支持正则表达式组。考虑这个模式文件:

# This is a comment
figure ([0-9+])<tab>Figure \1

\1语法插入第一组的内容(bracketed)。要在命令行上执行此操作,我认为您需要使用单引号(如果我错了,请纠正我):

repren --rename --from 'figure ([0-9+])' --to 'Figure \1' --dry-run path/to/directory_or_files_here

不过,这只是触及了它功能的表面。它还可以选择性地更改文件的内容(因此上述所有示例中都repren需要)。--rename

免责声明:我与其没有任何关联,repren也没有任何开发,我只是发现它是一种非常宝贵的省时工具。

答案4

过去我经常使用基于终端的文件浏览器bulkrename中的命令来执行此ranger操作。步骤如下:

  1. 导航到包含文件的目录。
  2. 选择所有要重命名的文件。如果要选择该目录中的所有内容,只需按v
  3. 使用该:bulkrename命令,它将带您到 vim 或默认编辑器中选定的所有文件名的列表。
  4. 按照您的喜好在 vim 中操作文件名并保存!

相关内容