如何使用终端批量重命名文件?

Posted

技术标签:

【中文标题】如何使用终端批量重命名文件?【英文标题】:How can I batch rename files using the Terminal? 【发布时间】:2011-07-20 15:06:19 【问题描述】:

我有一组文件,都是nnn.MP4.mov。我怎样才能将它们重命名为 nnn.mov

【问题讨论】:

安装muCommander。它具有 Total Commander 样式的批量重命名器。为什么要浪费时间在 100 个字符的令人兴奋的批处理命令上? @Nakilon 因为学习命令行有更大的投资回报 【参考方案1】:

首先,使用以下内容进行试运行(实际上不会重命名任何文件):

for file in *.mov
do
  echo mv "$file" "$file/MP4./"
done

如果一切正常,请从第三行删除 echo 以实际重命名文件。

【讨论】:

无法弄清楚为什么这不起作用...有输出,看起来像,但实际上并没有做任何事情。好吧,我终于发现您需要删除 ECHO 语句才能真正让它做某事(无论如何在 OSX 10.7 上)。因此,如果您保留 echo 语句,那么您可以测试它以查看重命名是否会按您的意愿工作,然后删除 echo 以使其正常工作。所以与 ren *-hd.png *.png 的 Windows 等价的是: for file in *.png do mv "$file" "$file/-hd/" done 运行脚本需要: 1. 保存在rename.sh文件中; 2. 使其可执行chmod 755 rename.sh; 3. 从您有要重命名的文件和shell脚本./rename.sh的当前文件夹启动它; 4. 如果结果很好,从脚本中删除echo 并再次启动它。我需要为文件组添加扩展名。所以我在脚本中的操作是这样的:mv "$file" "$file.jpeg" 这是一个脚本,需要创建为文件然后运行对吗?线索? 像这样作为单行 cmd 运行:for file in *.mov; do echo mv "$file" "$file/MP4./"; done; 可以解决问题。 对于其他用例,注意命令的一般格式:echo mv "$file" "$file/[replace_this]/[with_this]"【参考方案2】:

我刚刚成功使用了 Automator(我第一次遇到麻烦),而且效果非常好。我将自动化保存为服务。大约需要 10 秒才能使某些东西易于重复使用:

    打开 Automator。 作为文档类型,选择“服务”。 更改服务将选定的“文本”接收到“文件和文件夹”。 考虑将“任何应用程序”更改为仅 Finder。 从侧边栏中选择“文件和文件夹”(在库下),然后从列出的操作中,在中心列中,将“重命名 Finder 项目”拖到右侧,并将其放在“将操作或文件拖到此处以构建您的工作流程。” 将您刚刚添加的操作从“添加日期或时间”更改为“按顺序执行”。 点击操作底部的“选项”并选中“工作流运行时显示此操作”选项。 点击“CMD+S”将服务保存为“替换文本”之类的内容.. 完成!

现在您可以右键单击 Finder 中的任何选项,转到“服务”菜单并选择“替换文本”,填写您希望文本更改或替换的方式 - 然后单击“继续”以应用配置的更改。

【讨论】:

我投了反对票,因为这个问题有“终端”标签。 很好的答案,即使这不是 OP 所要求的。欢迎任何借口让我学习 Automator :-) 顺便说一句,它不适用于文件夹,但它适用于多个选定的文件。 太棒了!谢谢你。 太棒了!不要在乎OP! 你不是说把“添加时间和日期”改成“替换文本”吗?【参考方案3】:

在 mac OSX 上,您可以通过 Homebrew 安装 rename 命令:brew install rename

然后您可以在命令行上使用该文件夹中的查找/替换来重命名:

rename 's/\.MP4\././' *

您还可以使用man rename 查看更多选项。

【讨论】:

【参考方案4】:

测试打印操作:

for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";echo mv \"$file\" \"$j\"; done

为了让它发挥作用:

for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";mv "$file" "$j"; done

【讨论】:

感谢一站式解决方案【参考方案5】:
for n in *.MP4.mov
do
   mv $n $(echo $n | sed -e 's/.MP4//')
done

这甚至可以在没有参数替换的非常旧的 shell 上工作,而且至少在我看来它更具可读性。

【讨论】:

我已将此应用于名称中使用 _MG_ 的文件,我需要通过在中间修改 ** 来完美地更改为 -IMG_。发挥了魅力。谢谢!【参考方案6】:

OS X 有一个Rename Files… 上下文菜单项,当您在 Finder 中选择两个或更多文件时会调用该菜单项。提供与上述 Automator 回答相同的功能。如果您愿意,Automator 会为您提供更进一步的工具。

(我知道 OP 要求提供终端,但其他 33 个喜欢 Automator 响应)

【讨论】:

【参考方案7】:
for i in `ls *png`;do echo mv $i "$i%%.*"@xx."$i##*.";done

【讨论】:

【参考方案8】:

vimv 允许您使用 Vim 的文本编辑功能重命名多个文件。

输入 vimv 会打开一个列出所有文件的 Vim 窗口,您可以进行模式匹配、视觉选择等来编辑名称。退出 Vim 后,文件将被重命名。

[免责声明:我是该工具的作者]

【讨论】:

【参考方案9】:
ls -1 *.MP4.mov | while read f; do mv -i "$f" "$(basename \"$f\" .MP4.mov)"; done

编辑:完全重写。

【讨论】:

如果它做你想要的,删除 -i 我的意思是,它认为应该有一个延续 它所做的就是将其重命名为"nnn.MP4.mov".mov【参考方案10】:
for i in *; 
do j=`echo $i | cut -d . -f 1`; 
j=$j".mov";
mv $i $j; 
done

这将删除第一个点之前的所有内容并附加 .mov

但是如果某些文件是例如hi.2.mov 和 hi.1.mov 一个会被覆盖,请谨慎使用^^

【讨论】:

以上是关于如何使用终端批量重命名文件?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式批量重命名 OS X 终端中的文件

js 如何批量重命名文件

文件批量重命名 如1-2 3-4 5-6

如何以照片的拍摄时间批量重命名文件

如何批量重命名文件夹下的Excel文件

如何用Matlab为文件批量重命名