この単純なBASHスクリプトは、PHPプロジェクトからmsgstrを収集します。
#!/bin/sh
TARGET=/path/to/project
LPATH=locale/cy_GB/LC_MESSAGES
POFILE=messages.po
mkdir -p $LPATH
touch $TARGET/$LPATH/$POFILE
cd $TARGET
find . -name '*.php' -print | xargs xgettext -j --from-code=UTF-8 -o $TARGET/$LPATH/$POFILE
2つの質問があります。
-printが見つかったファイルをリストしないのはなぜですか?すべての文書に記載されていますか?
findがファイルを処理する順序を指定する方法はありますか?同等のPHPスクリプトを実行すると、lsにリストされている順序でファイルを処理してディレクトリに移動します。しかし、 find はファイルが明確な順序になっておらず、ディレクトリがあちこちに散らばっていて、それ自体で作業を行うようです。
ベストアンサー1
find
Bashとは何の関係もなく、Linuxを実行している場合は、システムでGNU findutilsが提供する別のユーティリティです。
-print
ファイルはリストされますが、必要ありません。これがデフォルトです。おそらくあなたがそれを「見ない」理由は、その出力が標準入力を介してxargs
取られるからです。それは決してあなたの端末に到達しません。両方で動作させるには、またはtee
同様のものを使用する必要があります(信頼できないファイル名を取得した場合は、次のことを行う必要があります)。いつもuse -print0
, これは移植できない拡張なので、ここには含まれません):
find . -name '*.php' |
tee >(xargs xgettext -j --from-code=UTF-8 -o "$TARGET/$LPATH/$POFILE")
find
ファイルはソートされていない順序で印刷されます。整理したい場合は、sort
まず実行する必要があります。