• ベストアンサー

パイプの使い方

ファイル検索でパイプを使って複数のソフトを経由して検索しようとしています。 ファイルパスを複数行返すコマンドの結果をfindに渡すにはどのようにするとよいのでしょうか? たとえばファイルパスの一覧からフォルダを除外してファイルだけを表示しようとしてみましたが、以下の場合はどこを直せばよいですか? rpm -ql bison | find -type f

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

次のようにxargsコマンドを使えばfindもつかえると思います。 rpm -ql bison | xargs --replace=% find % -type f -maxdepth 0 ただし、xargsやfindはプラットフォームによってオプションが異なる場合があるので注意が必要です。Linuxなら上のオプションの与え方で動くんじゃないかと思います。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.3

find は全く用途が違います。 案1 rpm -ql bison | xargs ls -ld | grep '^-' 案2 rpm -ql bison | while read a;do test -f "$a" && echo "$a";done

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

findは探す対象のファイル/ディレクトリ名を標準有力から読み取る機能がありませんので、パイプでは無理です。 find `rpm -ql bison ` -type f と逆クォートで入れてやればOK. rpm-q の出力サイズが非常に大きい場合は動きません。

回答No.1

パイプはUNIX系OSの強力な機能ですが、呼び出すコマンドの選定が難しいところだと思います。 findは選択したファイルリストをパイプで後段のプログラムに渡すような処理は良く使いますが、今回のような用途には使う事ができないと思います。 汎用的な回答は一行づつ"file"変数に格納してファイルかどうかtestコマンドで検査する方法だと思います。 bashをお使いであれば次のようなコマンドではどうでしょうか。 rpm -ql bison | while read file ; do test -f $file && echo $file ; done 適当なファイルリストがあれば"do"と"; done"の間を適当に書き換えて、他の仕事をさせる事もできます。 "test"はbashの組込み関数ですが、様々なオプションが用意されています。興味があれば"help test"を実行して調べてください。 パイプが使いこなせるようがんばってください。

関連するQ&A

専門家に質問してみよう