web-dev-qa-db-ja.com

複数のディレクトリでgenstringsを使用する方法は?

ディレクトリがあり、そこには多くのサブディレクトリがあります。これらのサブディレクトリにはサブディレクトリがある場合もあります。内部にソースファイルがあります。

Genstringsを使用して、これらすべてのディレクトリとサブディレクトリを移動するにはどうすればよいですか?

ターミナルのルートディレクトリにcdして、次のように入力するとします。

genstrings -o en.lproj *.m

これらのすべてのディレクトリを調べるようにするにはどうすればよいでしょうか?または、コンマで区切られた多数の相対パスを追加する必要がありますか?どうやって?

58

1つの方法は次のとおりです。

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

xargsは、Shell-fooの素晴らしい塊です。標準入力の文字列を受け取り、次の関数の引数に変換します。これにより、現在のディレクトリの下にあるすべての.mファイルがgenstringsコマンドに入力されます。

この回答は、使用されるパスのスペースを処理するため、より堅牢です。ソースファイルを処理するときにファイルをスキップしないようにするために使用する必要があります。

編集:コメントや他の回答で述べたように、*。mは引用符で囲む必要があります。

98
Brian King

正確な理由はわかりませんが、ブライアンの命令はうまくいきませんでした。これは:

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

編集:まあ、私が最初にこれを書いたとき、私は急いでいて、うまくいくものが必要でした。上記の受け入れられた答えを使用するときに発生した問題は、「*。m」を引用する必要があることでした(そして、好奇心の強い人は、ブライアンキングの答えに関するコメントでなぜこれが当てはまるかについての説明を見つけることができます)。最善の解決策は、適切なビットを引用した元の回答を使用することであり、それは次のようになります。

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

しかし、何らかの理由で誰にも役立つ場合に備えて、上記の元の返信をそのまま残しています。

88
Jonathan Zhan

これは私のために働く:

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

ブライアンとウーバーハムスターに感謝します。

17
SEG

誰かが気付いたのか、オプションが後で出たのかはわかりませんが、今は-aオプションはgenstringsです。上記のオプションはどれもうまくいきませんでした。以下は私の解決策です。

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

これにより、読み取ったファイルの名前も出力されます。

上記のコマンドは正常に機能しますが、プロジェクトフォルダーにはフォルダー内にあるがXcodeプロジェクトに含まれていないファイルが多数あるため、私にとっては正確ではありませんでした。だから、私がやったことは、pbxprojファイルを解析することによって私のプロジェクトで使用されるファイルのリストを作成しました。 filelist.txtにリストを追加し、以下のコマンドを実行しました

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

次のように、genstringsコマンドに別のパスを追加しました。

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

..そしてそれはうまくいきました!

ところでgenstringsについての便利なこと。アプリの開発を続けると、genstringsには、ローカライズされた文字列ファイルに新しい文字列を追加する-aスイッチがあります。

3
Emmanuel Ay

Objective-CとSwiftの両方を使用したソリューションは誰も投稿していないため、その方法を共有します。

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

これを使用すると、ローカライズ可能な文字列ファイルがSwiftおよびObjective-Cファイルの両方の文字列に置き換えられます。

編集:すべてのサブディレクトリを含むディレクトリにcdする必要があります。

3
Matt

私は.mmファイルに多くのコードがあるので、使用する必要があります:

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

または他のバリアント、など

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

以下は、以前の回答を改善します。これにより、.hファイルと.mファイルの両方が見つかります。

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

Swift

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

同じフォルダーにファイルが必要な場合

find ./ -name \*.Swift -print0 | xargs -0 genstrings -o .
1
anoop4real

一部のフォルダーの名前にスペースが含まれているフォルダー構造の文字列ファイルの生成に問題がありました。

このサイトで素敵なソリューションを見つけました: http://riveroften.com/generate-localizable-strings-file-with-genstrings/

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

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

これにより、genstringsコマンドに現在のディレクトリのすべての.mファイルが入力されます。 Localizable.stringファイルにNSLocalizedString() "key/context"を作成するよりも、プロジェクト内の任意の場所で使用できます。

0
sudhakkar k