更改目录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),那么让我们来看看ls
和sed
通过移除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一个脚本,即使它只是一个单一的命令,只有一个单词,比如ls
或date
等。在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上查看这篇文章。
它显示了许多不涉及编码的方法
你也可以看看这篇关于更改文件扩展名的博文。
它包含一个控制台应用程序,为您做所有的事情。