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

Macos OSX:对文件夹中的所有文件执行相同的命令,macos,command-line,image-compression,command-line-tool,Macos,Command Line,Image Compression,Command Line Tool,我正在使用一个名为TMX()的命令行工具 我想对某个文件夹中的每个.png文件执行此命令。我该怎么做 这就是它的使用方式: TMXResolutionTool <tmx path> <resize ratio> TMXResolutionTool <image path> <resize ratio> TMXResolutionTool <image path> <new width> <new height>

我正在使用一个名为TMX()的命令行工具 我想对某个文件夹中的每个.png文件执行此命令。我该怎么做

这就是它的使用方式:

TMXResolutionTool <tmx path> <resize ratio>
TMXResolutionTool <image path> <resize ratio>
TMXResolutionTool <image path> <new width> <new height>
TMXResolutionTool
TMXResolutionTool
TMXResolutionTool
干杯。

find-name“*.png”| xargs-Irepl TMXResolutionTool repl
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
find-name“*.png”|同时读取f;做
TMXResolutionTool$f;
TMXResolutionTool$f;
TMXResolutionTool$f;完成

我认为,
for/do
循环比
find
plus
xargs
更清晰,可能更快一些。假设您在OS X上使用的是默认shell,
bash
,如果您希望将其作为一行程序来执行,则该命令的一般形式是:

for f in <files>; do <somecommand> $f; done
您还可以在同一行的循环中运行多个命令,只需将它们用分号链接即可。因此,如果您的问题意味着您希望在每个文件上以不同的参数顺序运行三次TMXResolutionTool:

for f in myfolder/*; do TMXResolutionTool $f <otherparameters>; TMXResolutionTool $f <differentparameters>; TMXResolutionTool $f <yetmoredifferentstuff>; done
myfolder/*中f的
;执行TMXResolutionTool$f;TMXResolutionTool$f;TMXResolutionTool$f;完成

顺便说一下,这些都是基本的
bash
shell技巧;它并不特定于OS X。任何关于
bash
的书都会告诉你这一切和更多(尽管如果你想从Mac的角度了解命令行,我推荐O'Reilly的书)。

注意如果你想在当前文件夹中的所有文件上运行命令,只需使用
*
(例如
代表f in*
for f in myfolder/*; do TMXResolutionTool $f <otherparameters>; TMXResolutionTool $f <differentparameters>; TMXResolutionTool $f <yetmoredifferentstuff>; done