【问题标题】:Changing file extensions for all files in a directory on OS X更改 OS X 目录中所有文件的文件扩展名
【发布时间】:2013-01-30 23:45:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: macos terminal file-extension


    【解决方案1】:

    你可以这样使用:

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

    先复制一份!

    【讨论】:

    • 在 Mavericks 上,这对我不起作用,给出以下输出:usage: mv [-f | -i | -n] [-v] 源目标 mv [-f | -i | -n] [-v] 源...目录
    • 刚刚在 Mavericks 上试过,效果很好。这假设您使用的是 bash,默认 shell。
    • 在 Mavericks 上运行良好,如果遇到权限问题,只需在整行前插入 sudo,或输入 su。
    • 这不适用于包含空格且没有正确引用的文件名。
    • $old 应在此处用双引号括起来,以免造成严重破坏。编辑:整个`basename ...` 也是。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这是命令行重命名文件的最佳建议。谢谢!
    • 如果要重命名文件名中带有前缀或后缀的文件,可以使用ren 'prefix_*.txt' 'prefix_#1.md'
    【解决方案3】:

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

    【讨论】:

    • 是的。这太棒了。在终端:open . 然后执行此操作!容易得多。
    • 哇!从来不知道这个!
    • 不错的发现,但是在重命名文件扩展名时,您通常需要处理很多文件。这种方法在 El Capitan 上会提示您输入每个文件,询问您是否真的要重命名它。
    • 我刚刚尝试过 El Capitan,但它并没有提示我做任何事情。刚刚重命名,没有问题....
    • Finder > 首选项 > 高级 > 在更改扩展之前显示警告。
    【解决方案4】:

    执行此操作的首选 Unix 方式(是的,OS X 基于 Unix)是:

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

    如果设计使ls 循环遍历整个文件名列表,为什么还要循环使用for?你有管道,使用它们。您不仅可以使用命令创建/修改输出,还可以使用命令(对,即由命令创建的命令,这是 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"
    $
    

    如您所见,它不仅是一个单行脚本,而且是一个完整的脚本,它还通过创建另一个脚本作为输出来工作。因此,我们只需将单行脚本生成的脚本提供给sh,它是 OS X 的 脚本解释器。当然,它甚至适用于其中包含空格的文件名。

    顺便说一句:每次您在 Terminal 中键入内容时,您都会创建一个脚本,即使它只是一个带有诸如 lsdate 之类的单词的单个命令。一切都在 Unix 中运行shell 始终是一个脚本/程序,它只是一些基于 ASCII 的流(在这种情况下是指令流,而不是数据流)。

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

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

    也许在 finder 中重命名文件更容易,但如果远程连接到 Mac(例如通过ssh),则根本无法使用 finder。这就是为什么 cmd 行仍然非常有用的原因。

    【讨论】:

    • 这很好用 - 要递归执行,请将 'ls' 更改为 'find 。 -name "*.txt"'
    【解决方案5】:

    根据上面选择的最准确的答案,这里有一个可重用的 bash 函数:

    function change_all_extensions() {
        for old in *."$1"; do mv $old `basename $old ."$1"`."$2"; done
    }
    

    用法:

    $ change_all_extensions txt md
    

    (我无法弄清楚如何在对该答案的评论中获得干净的代码格式。)

    【讨论】:

      【解决方案6】:

      无需编写脚本,只需点击此命令即可

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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

        • 如果文件名称中的任何位置包含x?gif(例如maxsgift.gitx.git),这将修改比您预期的文件更多的文件。这是最好的:sed s/\.gif$//'.
        【解决方案8】:
            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
        

        【讨论】:

          【解决方案9】:

          列表=ls 对于 $list 中的文件 做 newf=echo $file|cut -f1 -d'.' echo "newf 是 $newf" mv $文件 $newf.jpg 完成

          【讨论】:

            【解决方案10】:

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

            • 选择所有文件,右键选择"rename..."

            • "Find" 中添加现有文件扩展名,并用"Replace with" 替换您想要替换的扩展名。

            完成了!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-09-10
              • 2012-05-29
              • 1970-01-01
              • 1970-01-01
              • 2016-01-05
              • 2023-03-12
              • 2018-08-12
              相关资源
              最近更新 更多