11

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

这是它的使用方式:

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

干杯。

4

2 回答 2

20

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

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

where<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

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

于 2013-05-21T21:13:53.957 回答
9
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
于 2013-05-21T20:55:42.620 回答