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

Eye*_*all 10 macos command-line command-line-tool image-compression

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

这是它的使用方式:

TMXResolutionTool <tmx path> <resize ratio>
TMXResolutionTool <image path> <resize ratio>
TMXResolutionTool <image path> <new width> <new height>
Run Code Online (Sandbox Code Playgroud)

干杯.

dod*_*ler 18

我认为一个for/do环是清晰的,或许比他们快一点findxargs.假设您正在使用默认shell,bash在OS X上,如果您想将其作为单行程序执行,则命令的一般形式为:

for f in <files>; do <somecommand> $f; done
Run Code Online (Sandbox Code Playgroud)

where <files>是一个表达式,其求值为文件列表(通常是通配符扩展),<somecommand>是要为每个文件执行的命令行,并依次$f扩展到每个文件<files>.所以你输入这样的东西:

for f in myfolder/*; do TMXResolutionTool $f <otherparameters> ; done
Run Code Online (Sandbox Code Playgroud)

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

for f in myfolder/*; do TMXResolutionTool $f <otherparameters>; TMXResolutionTool $f <differentparameters>; TMXResolutionTool $f <yetmoredifferentstuff>; done
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这是所有基本的bashshell技巧; 它不是特定于OS X.任何书bash都会告诉你所有这些以及更多(虽然如果你想从Mac的角度来学习命令行,我推荐O'Reilly的书来学习Unix for OS X Mountain Lion).


Chr*_*ton 8

find <path> -name "*.png" | xargs -Irepl TMXResolutionTool repl <ratio>
Run Code Online (Sandbox Code Playgroud)

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

find <path> -name "*.png" | while read f ; do 
TMXResolutionTool $f <resize ratio> ; 
TMXResolutionTool $f <resize ratio> ;
TMXResolutionTool $f <new width> <new height> ; done
Run Code Online (Sandbox Code Playgroud)