【问题标题】:rename multiple files shell in Linux [closed]在Linux中重命名多个文件shell [关闭]
【发布时间】:2012-06-19 20:18:19
【问题描述】:

我有许多文件,例如 file_022.bmp、file_023.bmp...file_0680.bmp。我需要将它们重命名为更方便的名称,例如 file_1.bmp、file_2.bmp...file_658.bmp。

是否有我可以编写的 bash 脚本来为我执行此操作?感谢您的帮助和建议。

卢克H

【问题讨论】:

标签: linux file bash


【解决方案1】:

如果您使用的是基于 debian 的 linux 系统,那么您可以使用接受 regular expressions 的重命名脚本来重命名文件。更多 info 因为我很难找到手册页。

例如

harald@Midians_Gate:~$ ls p*.php

parse.php  pd.php  pgrep.php  preg_based.php  proc.php

假设我想将扩展名更改为 .perl 并在名称前加上 file_ 然后我使用命令:

rename -n 's/([a-z]*)\.php/file_$1.perl/' p*.php

会给

parse.php renamed as file_parse.perl
pd.php renamed as file_pd.perl
pgrep.php renamed as file_pgrep.perl
preg_based.php renamed as preg_file_based.perl
proc.php renamed as file_proc.perl

我选择并捕获基本文件名([a-z]*),然后在替换$1 中使用它并附加.perl 并在$1 前面加上常规字符串file_

-n 选项使其在不更改任何内容的情况下测试运行

从这个例子中你可以看到,你选择的正则表达式需要被正确考虑,否则你会得到像上面 preg_based.php 这样你想要 file_preg_based.perl 的情况:) 为了弥补我需要在这里使用([a-z_]*)

这是我一直坚持使用 debian 的众多原因之一,不过我很想找到其他非 debian 系统的等价物:-/

【讨论】:

【解决方案2】:

如果你有文件 a.bmp,b.bmp,c.bmp 并且您想以 file_1.bmp、file_2.bmp、file_3.bmp 结束

使用 bash:

mkdir result
index=1
for i in *.bmp
do
  mv "$i" "result/file_"$((index++)).bmp
done

注意事项: 建议使用子目录以避免意外覆盖类似于 file_xx.bmp 的文件

如果你有太多文件在扩展后无法放入命令行,你可以使用类似的东西:

mkdir result
index=1
find . -name "*.bmp" | while read i
do
  echo mv "$i" "result/file_"$((index++)).bmp
done

检查输出后删除“回声”

【讨论】:

    猜你喜欢
    • 2014-09-14
    • 2015-04-17
    • 2018-06-09
    • 1970-01-01
    • 2012-12-06
    • 2011-10-18
    • 2021-06-17
    • 2022-01-13
    • 2012-07-20
    相关资源
    最近更新 更多