重命名多个文件删除所有字符

重命名多个文件删除所有字符

我该如何更换它

[www.Example.com]Name-episode-77.mp4
FGBs episode 3 dks.mp4 

HxH 077.mp4
HxH 003.mp4

*文件名称不符合确切的模式

我想要 :-

  • 删除所有字符和符号
  • 格式化数字从 3 到 003
  • 在文件名开头添加字符串

答案1

此单行代码适用于您的示例数据:

for i in *; do echo "$i";mv "$i" $(echo "$i" | perl -ne '($num)=$_=~/(\d+).*\.mp4/; print "HxH",sprintf("%03d",$num),".mp4","\n"'); done;

解释:

for i in *; 
do 
  echo "$i";
  mv "$i" $(echo "$i" | perl -ne '($num)=$_=~/(\d+).*\.mp4/; print "HxH",sprintf("%03d",$num),".mp4","\n"'); 
done;

for i in *;do-> 循环遍历当前目录中的所有文件
echo "$i";-> 写入当前文件(参见 progres/logging)
mv "$i" $(echo "$i" | perl -ne '($num)=$_=~/(\d+).*\.mp4/; print "HxH",sprintf("%03d",$num),".mp4","\n"');-> 重命名命令(原始名称到 perl 命令的输出) perl 命令从给定的文件名中提取数字并打印“HxH”、以 0 开头的数字和“.mp4”


重要的提示:

给出的命令适用于您提供的两个示例输入。在将其应用于实际文件之前,您一定要对其进行测试。因此,我建议mv "$i"从命令中删除。然后您可以验证名称。

答案2

另一种可能性是使用rename(perl 版本,这是 Ubuntu 附带的标准版本)和正则表达式(RE):

rename -vn 's/.*?([0-9]+).*/sprintf("HxH %03d.mp4", $1)/e' *.mp4

一步步:

  1. rename -vn将会说出 ( -v) 将执行哪些重命名,但不执行它们 ( -n);

  2. 对于每个名称,s用第二个字符串替换()第一个 RE,并用/;分隔。

  3. 第一个 RE 以非贪婪方式匹配零个或多个字符 ( .*?),后跟一个或多个数字 ( ),后跟任意内容;由于括号 ( ) [0-9]+,数字匹配保存在第一组中;(...)

  4. 第二个字符串扩展为 perl 命令,sprintf("HxH %03d", $1)其中$1是上面匹配的第一个组;

  5. e命令的标志s表示我想要执行替换表达式并使用结果,因此执行并在大小为 3 的字段中以前导零sprintf打印中的数字( ); $1"%03d"

  6. 最后,将该命令应用于所有以( )rename结尾的文件。.mp4*.mp4

看:

% ls
FGBs episode 3 dks.mp4  [www.Example.com]Name-episode-77.mp4
% rename -vn 's/.*?([0-9]+).*/sprintf("HxH %03d.mp4", $1)/e' *.mp4
FGBs episode 3 dks.mp4 renamed as HxH 003.mp4
[www.Example.com]Name-episode-77.mp4 renamed as HxH 077.mp4

请注意,这只是一次测试运行;重命名无法撤消...现在让我们真正运行一下:

% rename -v 's/.*?([0-9]+).*/sprintf("HxH %03d.mp4", $1)/e' *.mp4 
FGBs episode 3 dks.mp4 renamed as HxH 003.mp4
[www.Example.com]Name-episode-77.mp4 renamed as HxH 077.mp4
% ls
HxH 003.mp4  HxH 077.mp4

正则表达式确实很强大。

请注意,只会使用第一组数字:

% touch "Another serie 2 ep 34.mp4"
% rename -vn 's/.*?([0-9]+).*/sprintf("HxH %03d.mp4", $1)/e' *.mp4
Another serie 2 ep 34.mp4 renamed as HxH 002.mp4

为了避免这种情况......例如研究https://stackoverflow.com/questions/5320525/regular-expression-to-match-last-number-in-a-string并注意“mp4”中的“4”......

此外,如果名称包含数字---参见下面@kos 的评论。

相关内容