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

时间:2011-03-22 16:01:20

标签: macos batch-file terminal

我有一组文件,所有文件nnn.MP4.mov我怎样才能重命名它们以便它只是nnn.mov

10 个答案:

答案 0 :(得分:84)

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

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

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

答案 1 :(得分:35)

我刚刚成功使用了Automator(我第一次打扰),而且效果非常好。我将自动化保存为服务。制作易于重复使用的东西花了大约10秒钟:

  1. 打开Automator。
  2. 作为文档类型,选择“服务”。
  3. 更改服务会将选定的“文本”接收到“文件和文件夹”。
  4. 考虑将“任何应用程序”更改为Finder。
  5. 从侧边栏中选择“文件和文件夹”(在“库”下),然后从列出的操作中,在中间列中,将“重命名查找项目”拖到右侧并将其放在“将操作或文件拖到此处”中建立你的工作流程。“
  6. 将刚添加的操作从“添加日期或时间”更改为“按顺序排列”。
  7. 点击操作底部的“选项”,然后选中“工作流程运行时显示此操作”选项。
  8. 点击“CMD + S”将服务保存为“替换文字”..
  9. 完成!
  10. 现在,您可以右键单击Finder中的任何选项,转到“服务”菜单并选择“替换文本”,填写您希望文本更改或替换的方式 - 然后单击“继续”以应用已配置的更改。

答案 2 :(得分:11)

for n in *.MP4.mov
do
   mv $n $(echo $n | sed -e 's/.MP4//')
done

这甚至可以在没有参数替换的真正旧shell上运行,至少对我的眼睛来说有点可读性。

答案 3 :(得分:10)

测试打印操作:

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

答案 4 :(得分:5)

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

然后,您可以在命令行上使用该文件夹中的find / replace重命名:

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

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

答案 5 :(得分:1)

for i in `ls *png`;do echo mv $i "${i%%.*}"@xx."${i##*.}";done

答案 6 :(得分:1)

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

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

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:0)

ls -1 *.MP4.mov | while read f; do mv -i "$f" "$(basename \"$f\" .MP4.mov)"; done

编辑:完全重写。

答案 9 :(得分:0)

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将被覆盖,所以请小心使用^^