如何使用终端批量重命名文件?
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 一个会被覆盖,请谨慎使用^^
【讨论】:
以上是关于如何使用终端批量重命名文件?的主要内容,如果未能解决你的问题,请参考以下文章