検索を使用したファイルの注文と印刷の処理

検索を使用したファイルの注文と印刷の処理

この単純な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つの質問があります。

  1. -printが見つかったファイルをリストしないのはなぜですか?すべての文書に記載されていますか?

  2. findがファイルを処理する順序を指定する方法はありますか?同等のPHPスクリプトを実行すると、lsにリストされている順序でファイルを処理してディレクトリに移動します。しかし、 find はファイルが明確な順序になっておらず、ディレクトリがあちこちに散らばっていて、それ自体で作業を行うようです。

ベストアンサー1

findBashとは何の関係もなく、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まず実行する必要があります。

おすすめ記事