如何跨多个目录使用生成器?

我有一个目录,其中有很多子目录。 那些副族有时甚至有副族。 里面有源文件。

我怎么可以用ge to穿越所有的这些d子和sub子呢?

假设我在terminal中input我的根目录,然后input:

genstrings -o en.lproj *.m 

我怎么能告诉它现在看看所有这些目录? 或者我将不得不添加很多相对path逗号分隔? 怎么样?

一种方法是:

 find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj 

xargs是一个很好的shell-foo。 它将采用标准的string并将它们转换为下一个函数的参数。 这将填充您的genstrings命令与当前目录下的每个.m文件。

这个答案handels在所用的path中的空间,所以它更健壮。 您应该使用它来避免在处理源文件时跳过文件。

编辑:如评论和其他答案中所述,* .m应引用。

我不知道为什么,但是布赖恩的命令并不适合我。 这样做:

 find . -name \*.m | xargs genstrings -o en.lproj 

编辑:那么,当我最初写这个,我匆忙,只是需要的东西,工作。 在使用上面所接受的答案时,我所遇到的问题是,必须引用“* .m”(好奇的可以find一个解释,为什么Brian King的答案的评论是这样的)。 我认为最好的解决办法是用适当的位引用原来的答案,然后读取:

 find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj 

尽pipe如此,我仍然保留原来的答复,以免因任何原因帮助任何人。

这适用于我:

 find ./ -name \*.m -print0 | xargs -0 genstrings -o en.lproj 

感谢Brian和Uberhamster。

不知道是否有人注意到它或稍后的选项,但现在有一个-a选项是genstrings。 上述选项都不适合我。 以下是我的解决scheme。

 find ./ -name "*.m" -exec echo {} \; -exec genstrings -a -o en.lproj {} \; 

这也将打印读取的文件的名称。

虽然上面的命令工作正常,但它不完全是我的,因为在我的项目文件夹中有许多文件在文件夹中,但没有包含在Xcode项目。 所以我做的是,通过parsingpbxproj文件创build了我的项目中使用的文件列表。 在filelist.txt中添加了列表,并在命令下面触发

 while read f; do find ./ -name "$f" -exec echo {} \; -exec genstrings -a -o en.lproj {} \; ; done < filelist.txt 

我只是给genstrings命令添加了另一条path,如下所示:

 genstrings -o en.lproj *.m Classes/*.m 

..它工作得很好!

顺便说一句。 一个方便的东西关于genstrings。 当您继续开发应用程序时,genstrings有一个-a开关,将新string附加到本地化的string文件。

我在.mm文件中有很多代码,所以我必须使用:

 find . -name \*.m -or -name \*.mm | xargs genstrings 

或其他变体,例如

 find . -name \*.m -or -name \*.mm | xargs -0 genstrings -o en.lproj 

以下答案改进了以前的答案,这将find.h和.m文件:

 find ./ -name *.h -print0 -o -name *.m -print0 | xargs -0 genstrings -o en.lproj 

我有问题生成一个文件夹结构的string文件,其中一些文件夹的名称中有空格。

我在这个网站上find了一个很好的解决scheme: http : //riveroften.com/generate-localizable-strings-file-with-genstrings/

 find . -name "*.m" -print0 | xargs -0 genstrings -o "en.lproj" 

find./ -name“* .m”-print0 | xargs -0 genstrings -o en.lproj

这会将每个.m文件的genstrings命令填充到当前目录。 在Localizable.string文件中创buildNSLocalizedString()“key / context”,它可以在项目中的任何地方使用。

迅速

 find ./ -name \*.swift -print0 | xargs -0 genstrings -o .en.lproj 

如果你需要在同一个文件夹中的文件

 find ./ -name \*.swift -print0 | xargs -0 genstrings -o . 

尝试这个

 genstrings -o English.lproj ./Classes/*.m ./Classes/*.h ./Classes/subclass/*.m 

如果子文件夹不是太多,这将完美的工作。