Ben*_*ick 60 macos terminal file-extension
我有一个目录,其中包含一个扩展名(在本例中为.txt)的文件,我想自动转换为另一个扩展名(.md).
是否有一个简单的终端单行程序,我可以用来将此目录中的所有文件转换为不同的文件扩展名?
或者我需要用正则表达式编写脚本吗?
Pas*_*cle 127
你可以使用这样的东西:
for old in *.txt; do mv $old `basename $old .txt`.md; done
Run Code Online (Sandbox Code Playgroud)
先复制一份!
Ren*_*aud 58
或者,您可以安装ren(重命名)实用程序
brew install ren
ren '*.txt' '#1.md'
Run Code Online (Sandbox Code Playgroud)
如果要在文件名中重命名带前缀或后缀的文件
ren 'prefix_*.txt' 'prefix_#1.md'
Run Code Online (Sandbox Code Playgroud)
小智 42
终端不是必需的...只需突出显示要重命名的所有文件.右键单击并选择"重命名##项目",然后在"查找:"框中键入".txt",在"替换为:"框中键入".md".
首选的Unix方法(是的,OS X基于Unix)是:
ls | sed 's/^\(.*\)\.txt$/mv "\1.txt" "\1.md"/' | sh
为什么循环使用forif lsby design循环遍历整个文件名列表?你有管道,使用它们.您不仅可以使用命令创建/修改输出,还可以创建/修改命令(正确,即命令创建的命令,这是Unix的发明人之一Brian Kernighan在Unix上最喜欢的),所以让我们来看看是什么的ls和sed产生通过除去管sh:
$ ls | sed 's/^\(.*\)\.txt$/mv "\1.txt" "\1.md"/'
mv "firstfile.txt" "firstfile.md"
mv "second file.txt" "second file.md"
$
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它不仅是一个单行程序,而且是一个完整的脚本,它还可以通过创建另一个脚本作为输出来工作.所以让我们只给由一个班轮脚本生成的脚本sh,这是在 OS X的脚本解释当然它的作品甚至在它空格的文件名.
顺便说一句:每次你在Terminal中键入内容时都会创建一个脚本,即使它只是一个单词命令,只有一个单词,ls或者date等等.在Unix shell中运行的所有东西都是脚本/程序,这只是一些基于ASCII的流(在这种情况下是与数据流相对的指令流).
要查看正在执行的命令sh,只需在-x之后添加一个选项sh,这将打开shell中的调试输出,因此您将看到mv正在使用sed编辑器脚本传递的实际参数执行的每个命令(是的,脚本中的另一个脚本: - )).
但是,如果你喜欢复杂性,你甚至可以使用awk,如果你想安装其他程序来做基础工作,那就有ren.我甚至都知道那些喜欢perl为这个简单的日常任务编写50行左右脚本的人.
也许在finder中重命名文件更容易,但如果远程连接到Mac(例如通过ssh),则根本不可能使用finder.这就是为什么cmd线仍然非常有用.