我有一个目录满了一个扩展文件(.txt在这种情况下),我想自动转换到另一个分机(.MD)文件。
有一个简单的终端一个衬垫,我可以使用所有文件的转换在此目录中的文件扩展名不同?
或者我需要写一个正则表达式的脚本?
我有一个目录满了一个扩展文件(.txt在这种情况下),我想自动转换到另一个分机(.MD)文件。
有一个简单的终端一个衬垫,我可以使用所有文件的转换在此目录中的文件扩展名不同?
或者我需要写一个正则表达式的脚本?
你可以使用这样的事情:
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'
终端是没有必要为这个...只要突出显示所有要重命名的文件。 右键单击并选择“重命名##条”,并只需键入“.TXT”进入到‘查找’对话框和“.MD”变成了‘替换为’框。
首选Unix的方式做到这一点(是的,OS X是基于UNIX)是:
ls | sed 's/^\(.*\)\.txt$/mv "\1.txt" "\1.md"/' | sh
为什么有循环for
,如果ls
设计遍历文件名的整个名单? 你得管,使用它们。 您可以使用命令创建/修改,不仅输出,而且还命令(的权利,这是一个命令,这是布赖恩Kernighan的,UNIX的发明者之一,最喜欢在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"
$
正如你所看到的,它不仅是一个内胆,而是一个完整的脚本,其中还通过创建另一个脚本输出工作。 所以让我们只给由一个班轮脚本生成的脚本sh
,这是OS X. 的脚本解释当然它的作品甚至在它空格的文件名。
BTW:每次你在终端创建脚本的东西,哪怕是只像一个字一个命令ls
或date
等等一切都在Unix shell中运行始终是一个脚本/程序,这只是一些ASCII-基于数据流(这种情况下的指令流而不是一个数据流)。
要看到实际的命令被执行sh
,只需添加一个-x
后选择sh
,果然在壳调试输出,所以你会看到每一个mv
由实际传入参数执行命令sed
编辑器脚本(是的,在脚本中另一个脚本:-))。
但是,如果你喜欢复杂性,你甚至可以用awk
,如果你喜欢安装其他程序只是做基础工作,有ren
。 我知道,连人谁宁愿写50行左右perl
脚本,这个简单的每一天的任务。
也许这是取景器中重命名文件更容易,但如果远程连接到Mac(例如,通过ssh
),使用取景器是根本不可能的。 这就是为什么CMD线仍然是非常有用的。
基于上述选择,最准确的答案,以下是一个可重复使用bash函数:
function change_all_extensions() {
for old in *."$1"; do mv $old `basename $old ."$1"`."$2"; done
}
用法:
$ change_all_extensions txt md
(我无法弄清楚如何获得干净的代码格式在这个问题的答案评论。)
无需编写脚本,针对它只是打这个命令
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
对于那些你们谁是不是在节目真的很不错,你可以看看这篇文章维基怎样 。
它显示了这样做的许多方法,不涉及编码
你还可以检查出我这篇文章改变文件扩展名 。
它包含一个控制台应用程序,做所有的东西给你。