
私はこれをしようとしています:
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
のみが渡されます。必要なのは、ファイルのリストを次のように渡すことです。locate
cat
locate
議論到着するcat
。
xargs
通常、データストリームをパラメータリストに変換するために使用されます。入力がないと呼び出されません-r
。cat
それ以外の場合-0
(-r
標準ではありませんが、多くの実装で見つけることができます。少なくともxargsが役に立つ場合)、xargs
次のものを見つけます。性格入力からパラメータに変換されます。性格バックスラッシュ、一重引用符、二重引用符を使用してこれらの区切り文字をエスケープできるスペースで区切られたlocate
この形式は、通常ファイル名を表示するためには使用されません。
これが、NUL文字(ファイルパスで許可されていない唯一の文字)を使用してファイル名を区切るandオプションを-0
両方に使用する理由です。locate
xargs
また、これはlocate
標準コマンドではなく、バージョン、オプション、および動作が異なる多数の実装があることに注意してください。上記のコードは、少なくとも比較的最新バージョンのGNUlocate
とmlocate
Linuxベースのオペレーティングシステムの最も一般的な実装で動作します。
答え2
locate
コマンドは to の出力をcat
標準入力にパイプします。それはあなたが望むものではありません。何あなたlocate
必要なのは、次cat
のような出力を持つことです。ディスカッション。
私はこれを行う方法が次のとおりですxargs
。
locate pg_type.h | xargs cat