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

我有一个目录充满了一个扩展名(.txt在这种情况下),我想自动转换为另一个扩展名(.md)的文件。

是否有一个简单的terminal,我可以使用该目录中的所有文件转换为不同的文件扩展名?

或者我需要写一个正则expression式的脚本?

你可以使用这样的东西:

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

先复制一份!

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

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

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

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

terminal不是必需的…只需突出显示所有要重命名的文件。 右键单击并select“Rename ## items”,然后在“Find:”框中input“.txt”,在“Replace with:”框中input“.md”。

基于上面select的和最准确的答案,这里是一个可重用的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

为什么使用if循环遍历整个文件名列表? 你有pipe道,使用它们。 你不仅可以使用命令创build/修改输出,还可以使用命令创build/修改命令(正确的,就是命令创build的命令,Unix的发明者之一Brian Kernighan最喜欢Unix),那么让我们来看看lssed通过移除pipe道来产生sh

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

正如你所看到的那样,它不仅是一个单行的,而且是一个完整的脚本,它通过创build另一个脚本作为输出进一步工作。 因此,让我们将由单线程脚本生成的脚本提供给sh ,这是OS X 脚本解释器。当然,即使对于包含空格的文件名也是如此。

顺便说一句:每次你在terminal中input一些东西,你就会创build一个脚本,即使它只是一个单一的命令,只有一个单词,比如lsdate等。在Unix shell中运行的所有东西都是脚本/程序, (在这种情况下是与数据stream相对的指令stream)。

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

但是,如果你喜欢复杂性,你甚至可以使用awk ,如果你想安装其他程序来做基本的工作,那么就有ren 。 我甚至知道,为了这个简单的日常工作,他们宁愿写一行50行左右的脚本。

也许更容易find重命名文件,但如果远程连接到Mac(例如通过ssh ),使用取景器是不可能的。 这就是为什么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 
  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 

对于那些不擅长编程的人来说,可以在wiki上查看这篇文章。
它显示了许多不涉及编码的方法
你也可以看看这篇关于更改文件扩展名的博文。
它包含一个控制台应用程序,为您做所有的事情。