更改 OS X 上目录中所有文件的文件扩展名

我有一个目录的文件与一个扩展名(。我想自动转换为另一个扩展名(。海事处)。

有没有一个简单的终端一行程序,我可以用来转换这个目录中的所有文件到一个不同的文件扩展名?

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

80357 次浏览

你可以用这样的东西:

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

先复印一份!

    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

终端是不必要的... 只要突出显示所有的文件,你要重命名。右键单击并选择“重命名 # # 项目”,然后键入“。“ txt”转到“ Find:”框和“。将“ md”放入“ Replace with:”框中。

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

brew install ren


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

如果要在文件名中使用前缀或后缀重命名文件

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

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

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

用法:

$ change_all_extensions txt md

(我不知道如何在这个答案的注释中获得干净的代码格式。)

Unix 实现这一点的首选方法(是的,OS X 是基于 Unix 的)是:

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

如果 ls通过设计循环遍历整个文件名列表,为什么要使用 for循环?你有管子,用吧。你不仅可以使用命令来创建/修改输出,还可以使用命令来创建/修改输出(对,这是由命令创建的命令,这是 Unix 的发明者之一 Brian Kernighan 最喜欢的 Unix 命令) ,所以让我们看看通过移除到 sh的管道 lssed会产生什么:

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

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

顺便说一句: 每次你在 晚期中键入一些东西,你就创建了一个脚本,即使它只是一个命令,只有一个单词,如 lsdate等。在 Unix shell 中运行的所有东西都是一个脚本/程序,它只是一些基于 ASCII 的流(在本例中是指令流,而不是数据流)。

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

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

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

不需要编写脚本,只需点击这个命令即可

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

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

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

列表 = ls $list 中的文件 做 Newf = echo $file|cut -f1 -d'.' “ The newf is $newf” Mv $file $newf.jpg 搞定

您不需要终端; 下面是 MacOS Big Sur中的示例演示。

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

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

搞定!