OSX:对文件夹中的所有文件执行相同的命令

时间:2013-05-21 20:51:08

标签: macos command-line image-compression command-line-tool

我正在使用名为TMX的命令行工具(https://github.com/tonybeltramelli/TMXResolutionTool) 我想在某个文件夹中的每个.png文件上执行此命令。我怎么能这样做?

这是如何使用的:

TMXResolutionTool <tmx path> <resize ratio>
TMXResolutionTool <image path> <resize ratio>
TMXResolutionTool <image path> <new width> <new height>

干杯。

2 个答案:

答案 0 :(得分:15)

我认为for/do循环更清晰,可能比findxargs快一点。假设您在OS X上使用默认shell bash,如果您希望将其作为单行使用,则命令的一般形式为:

for f in <files>; do <somecommand> $f; done

其中<files>是一个计算结果为文件列表的表达式(通常是通配符扩展),<somecommand>是您要为每个文件执行的命令行,$f扩展转而<files>中的每个文件。所以你输入这样的东西:

for f in myfolder/*; do TMXResolutionTool $f <otherparameters> ; done

您也可以在同一行的循环内运行多个命令,只需用分号链接它们即可。因此,如果您的问题意味着您希望按顺序使用不同的参数对每个文件运行TMXResolutionTool三次:

for f in myfolder/*; do TMXResolutionTool $f <otherparameters>; TMXResolutionTool $f <differentparameters>; TMXResolutionTool $f <yetmoredifferentstuff>; done

顺便说一句,这是所有基本的bash shell技巧;它不是特定于OS X. bash上的任何书都会告诉你所有这些以及更多内容(尽管如果你想从Mac角度了解命令行,我推荐O'Reilly书籍Learning Unix for OS X Mountain Lion )。

答案 1 :(得分:6)

find <path> -name "*.png" | xargs -Irepl TMXResolutionTool repl <ratio>

如果你需要在移动到下一个文件之前按顺序运行所有这些命令,那么一个小的bash脚本可能会更清晰

find <path> -name "*.png" | while read f ; do 
TMXResolutionTool $f <resize ratio> ; 
TMXResolutionTool $f <resize ratio> ;
TMXResolutionTool $f <new width> <new height> ; done