猫とパイプが機能せず、場所が見つからないのはなぜですか?

猫とパイプが機能せず、場所が見つからないのはなぜですか?

私はこれをしようとしています:

locate pg_type.h | cat

ただし、このコマンドはpg_type.hの検索と変わりません。

何を変えるべきですか?cat pg_type.hどこでも公演をしたいですpg_type.h

ベストアンサー1

locate -e0 '*/pg_type.h' | xargs -r0 cat

locate pg_type.hパス内のすべてのファイルが検索されますpg_type.h。たとえば、ディレクトリがある場合は、rpg_type.hornその中にあるすべてのファイルが表示されます。

-0出力がないと、locateファイルはファイル名で完全に有効な文字である改行で区切られ、後処理はできません。

cat引数がないと、stdinから読み取られた内容がstdoutに書き込まれるため、downの出力locate | catのみが渡されます。必要なのは、ファイルのリストを次のように渡すことです。locatecatlocate議論到着するcat

xargs通常、データストリームをパラメータリストに変換するために使用されます。入力がないと呼び出されません-rcatそれ以外の場合-0-r標準ではありませんが、多くの実装で見つけることができます。少なくともxargsが役に立つ場合)、xargs次のものを見つけます。性格入力からパラメータに変換されます。性格バックスラッシュ、一重引用符、二重引用符を使用してこれらの区切り文字をエスケープできるスペースで区切られたlocateこの形式は、通常ファイル名を表示するためには使用されません。

これが、NUL文字(ファイルパスで許可されていない唯一の文字)を使用してファイル名を区切るandオプションを-0両方に使用する理由です。locatexargs

また、これはlocate標準コマンドではなく、バージョン、オプション、および動作が異なる多数の実装があることに注意してください。上記のコードは、少なくとも比較的最新バージョンのGNUlocatemlocateLinuxベースのオペレーティングシステムの最も一般的な実装で動作します。

おすすめ記事