- ベストアンサー
パイプの使い方
ファイル検索でパイプを使って複数のソフトを経由して検索しようとしています。 ファイルパスを複数行返すコマンドの結果をfindに渡すにはどのようにするとよいのでしょうか? たとえばファイルパスの一覧からフォルダを除外してファイルだけを表示しようとしてみましたが、以下の場合はどこを直せばよいですか? rpm -ql bison | find -type f
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
次のようにxargsコマンドを使えばfindもつかえると思います。 rpm -ql bison | xargs --replace=% find % -type f -maxdepth 0 ただし、xargsやfindはプラットフォームによってオプションが異なる場合があるので注意が必要です。Linuxなら上のオプションの与え方で動くんじゃないかと思います。
その他の回答 (3)
- notnot
- ベストアンサー率47% (4900/10359)
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)
findは探す対象のファイル/ディレクトリ名を標準有力から読み取る機能がありませんので、パイプでは無理です。 find `rpm -ql bison ` -type f と逆クォートで入れてやればOK. rpm-q の出力サイズが非常に大きい場合は動きません。
- ABE Yasuhiro(@yadiary)
- ベストアンサー率66% (18/27)
パイプは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"を実行して調べてください。 パイプが使いこなせるようがんばってください。