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

时间:2013-02-15 01:55:57

标签: macos terminal file-extension

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

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

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

10 个答案:

答案 0 :(得分:123)

您可以使用以下内容:

for old in *.txt; do mv $old `basename $old .txt`.md; done

先制作副本!

答案 1 :(得分:54)

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

brew install ren

ren '*.txt' '#1.md'

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

ren 'prefix_*.txt' 'prefix_#1.md'

答案 2 :(得分:40)

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

答案 3 :(得分:8)

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

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

如果for设计循环遍历整个文件名列表,为什么要使用ls进行循环?你有管道,使用它们。您不仅可以使用命令创建/修改输出,还可以创建/修改命令(正确,即命令创建的命令,这是Unix的发明人之一Brian Kernighan在Unix上最喜欢的),所以让我们来看看通过将管道移至ls来查看sedsh产生的内容:

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

正如您所看到的,它不仅是一个单行,而且是一个完整的脚本,它还可以通过创建另一个脚本作为输出来工作。因此,让我们将单行脚本生成的脚本提供给sh,这是 OS X的脚本解释器。当然,即使对于带有空格的文件名也是如此。它。

BTW:每次在终端中输入内容时,都会创建一个脚本,即使它只是一个包含lsdate等单词的命令。在Unix shell中运行始终是一个脚本/程序,它只是一些基于ASCII的流(在这种情况下是与数据流相对的指令流)。

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

但是,如果您喜欢复杂性,甚至可以使用sed,如果您想安装其他程序来执行基本工作,则可以使用awk。我甚至都知道那些愿意为这个简单的日常任务编写50行左右ren脚本的人。

在查找程序中重命名文件可能更容易,但如果远程连接到Mac(例如通过perl),则根本无法使用查找程序。这就是为什么cmd行仍然非常有用。

答案 4 :(得分:1)

只需点击此命令就不需要为它编写脚本

find ./ -name "*.txt" | xargs -I '{}' basename '{}' | sed 's/\.txt//' | xargs -I '{}' mv '{}.txt'  '{}.md'

答案 5 :(得分:1)

我遇到了一个类似的问题,其中文件最后被命名为.gifx.gif,这在OS X中有效删除了最后一个.gif

for old in *.gifx.gif; do
    mv $(echo "$old") $(echo "$old" | sed 's/x.gif//');
done

答案 6 :(得分:0)

    cd $YOUR_DIR
    ls *.txt > abc
    mkdir target // say i want to move it to another directory target in this case
    while read line
    do 
    file=$(echo $line |awk -F. '{ print $1 }')
    cp $line target/$file.md  // depends if u want  to move(mv) or copy(cp)
    done < abc

答案 7 :(得分:0)

对于那些不太喜欢编程的人,你可以在wiki how上查看这篇文章。
它显示了许多不涉及编码的方法
您也可以在changing file extensions上查看此博文 它包含一个控制台应用程序,可以为您完成所有工作。

答案 8 :(得分:0)

list = ls 用于$ list中的文件 做 newf = echo $file|cut -f1 -d'.' 回声“ newf是$ newf” mv $ file $ newf.jpg 完成

答案 9 :(得分:0)

你不需要这个终端;这是 MacOS Big Sur 中的示例演示。

  • 选择所有文件,右键单击并选择 "rename..." enter image description here

  • "Find" 中添加现有的文件扩展名以及要替换为 "Replace with" 的扩展名。 enter image description here

大功告成!