更改目录OSX中所有文件的文件扩展名

Ben*_*ick 60 macos terminal file-extension

我有一个目录,其中包含一个扩展名(在本例中为.txt)的文件,我想自动转换为另一个扩展名(.md).

是否有一个简单的终端单行程序,我可以用来将此目录中的所有文件转换为不同的文件扩展名?

或者我需要用正则表达式编写脚本吗?

Pas*_*cle 127

你可以使用这样的东西:

for old in *.txt; do mv $old `basename $old .txt`.md; done
Run Code Online (Sandbox Code Playgroud)

先复制一份!

  • 在Mavericks上,这对我来说不起作用,给出了这个输出:用法:mv [-f | -i | -n] [-v]源目标mv [-f | -i | -n] [-v] source ...目录 (4认同)
  • 如果没有适当的引用,这对于包含空格的文件名不起作用. (2认同)

Ren*_*aud 58

或者,您可以安装ren(重命名)实用程序

brew install ren

ren '*.txt' '#1.md'
Run Code Online (Sandbox Code Playgroud)

如果要在文件名中重命名带前缀或后缀的文件

ren 'prefix_*.txt' 'prefix_#1.md'
Run Code Online (Sandbox Code Playgroud)

  • 这是命令行重命名文件的最佳建议.谢谢! (4认同)
  • 可以通过文件夹递归完成吗? (2认同)

小智 42

终端不是必需的...只需突出显示要重命名的所有文件.右键单击并选择"重命名##项目",然后在"查找:"框中键入".txt",在"替换为:"框中键入".md".

  • 很好找,但是当重命名文件扩展名时,通常需要处理很多文件.在El Capitan上,此方法会提示您输入每个文件,询问您是否确实要重命名它. (6认同)
  • Finder > 首选项 > 高级 > 更改扩展名之前显示警告。 (2认同)

LBC*_*LBC 8

首选的Unix方法(是的,OS X基于Unix)是:

ls | sed 's/^\(.*\)\.txt$/mv "\1.txt" "\1.md"/' | sh

为什么循环使用forif lsby design循环遍历整个文件名列表?你有管道,使用它们.您不仅可以使用命令创建/修改输出,还可以创建/修改命令(正确,即命令创建的命令,这是Unix的发明人之一Brian Kernighan在Unix上最喜欢的),所以让我们来看看是什么的lssed产生通过除去管sh:

$ ls | sed 's/^\(.*\)\.txt$/mv "\1.txt" "\1.md"/'
mv "firstfile.txt" "firstfile.md"
mv "second file.txt" "second file.md"
$
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它不仅是一个单行程序,而且是一个完整的脚本,它还可以通过创建另一个脚本作为输出来工作.所以让我们只给由一个班轮脚本生成的脚本sh,这是 OS X的脚本解释当然它的作品甚至在它空格的文件名.

顺便说一句:每次你在Terminal中键入内容时都会创建一个脚本,即使它只是一个单词命令,只有一个单词,ls或者date等等.在Unix shell中运行的所有东西都是脚本/程序,这只是一些基于ASCII的流(在这种情况下是与数据流相对的指令流).

要查看正在执行的命令sh,只需在-x之后添加一个选项sh,这将打开shell中的调试输出,因此您将看到mv正在使用sed编辑器脚本传递的实际参数执行的每个命令(是的,脚本中的另一个脚本: - )).

但是,如果你喜欢复杂性,你甚至可以使用awk,如果你想安装其他程序来做基础工作,那就有ren.我甚至都知道那些喜欢perl为这个简单的日常任务编写50行左右脚本的人.

也许在finder中重命名文件更容易,但如果远程连接到Mac(例如通过ssh),则根本不可能使用finder.这就是为什么cmd线仍然非常有用.

  • 这很好用 - 要递归地执行此操作,请将 'ls' 更改为 'find 。-名称“*.txt”' (2认同)

小智 8

您不需要为此使用终端;这是MacOS Big Sur中的示例演示。

  • 选择所有文件,右键单击并选择"rename..." 在此输入图像描述

  • 添加现有文件扩展名"Find"以及要替换为 的扩展名"Replace with"在此输入图像描述

并做了!