• ベストアンサー

パイプの使い方

ファイル検索でパイプを使って複数のソフトを経由して検索しようとしています。 ファイルパスを複数行返すコマンドの結果を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% (4848/10262)
回答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

  • find結果で文字列検索?

    RedHatLinux7.2です。 シェルコマンドで複数のテキストファイルからある文字列を含むファイルだけリストアップしたいのですが、文字列検索の対象となるテキストファイルが色々なディレクトリにまたがっている場合はどうやってやればよいでしょうか? 多分findで抽出したファイルパスをgrepに渡せばいいんでしょうけどパイプとか?がまだ不勉強ですぐにわかりません。 初歩的なことだと思いますがよろしくお願いします。

  • Mac ターミナルのコマンド、パイプの使い方

    Mac OS10.6.8 ターミナル2.1.2 を使用しています。 パイプの使い方で困っています。 command1 | command2 command1は標準出力に複数行の文字列を出力します。(例えばcd, ls) command2でパイプを通してcommand1の出力した文字列からワイルドカードに一致する文字列を含む行を標準出力に表示させたいのですが、そのようなコマンドが分からず困っています。 最近このような使い方をしたいことが多々あり、毎回目視で探すかファイルに出力し、 エディタで検索しています。 基礎的なことかとは思いますがよろしくお願いいたします。

  • Java getRuntime().exec() でのパイプ利用に関して。

    はじめまして。 JavaのgetRuntime().execでコマンドプロンプトを動かそうと思っております。 コマンドプロンプトで「netstat -an | find "***"」というコマンドをJavaから実行したいと思っています。 しかし、Javaではパイプ(=|)を利用したコマンドは実行できない。 ということを検索してたどり着きました。 例などでは、「シェル」を利用しろ。などとかかれていましたが何をどうすればいいかわかりません。 String[] s = {"netstat","-an"}; Process process = Runtime.getRuntime().exec(s); 今は上記の状態で「netstat -an」が実行されています。 どうすれば「find "***"」で***の検索をかけることができるでしょうか? どうぞ、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • AIX findコマンド

    AIXのfindコマンドで指定フォルダ直下のファイルパスだけ出力する方法がありましたら教えて下さい。 よろしくお願いします。

  • RedHat5で荐怨

    Linuxのファイル検索のfindコマンドで、200401.cssを探すために find / -name "200401.css" というコマンドを実行したんですが、 find: ./home/forder001: 荐怨 find: ./home/forder002: 荐怨 ・ ・ ・ のようにフォルダがたくさん書かれてしまってfindの結果が流れるようにスクロールました。 200401.cssを検索するコマンドはこれで正しいですか? 「荐怨」は文字化けのようなものだと思うんですが、何というファイルできちんと設定できますか? man find も読めない文字が表示されます。

  • テキスト検索

    テキストに、ある文字が含まれないファイルの一覧を検索したいのですが、ソフトをインストールしないで出来る方法はないでしょうか? コマンドのFINDとかFINDSTRで出来そうだと思ったのですが、思うように出来ませんでした。

  • ファイルの拡張子だけを表示したい

    ファイルの拡張子だけを表示したい こんにちは。 Linuxのコマンドについて質問です。 とあるフォルダ配下にあるファイルをfindコマンドを使い検索し、そのフォルダ配下のファイルがどのような拡張子をもっているかを表示するコマンドを考えております。 たとえば、 /home/hoge/abc.xml /home/def.java /ghi.html /jkl.html というディレクトリとファイルがあったとして、ルートディレクトリからfindで検索をかけた場合、 .xml .java .html というように拡張子だけが抜き出されて表示される(重複した拡張子はのぞく)ようなコマンドです。

  • ファイルから1行または複数行を標準出力する方法

    ものすごく簡単な問題のような気がしますが,わかりません. コマンドで,テキストファイルから1行または複数行を標準出力する方法はありませんでしょうか? 例えば,foo.txt の10行目を出力 > line 10 foo.txt あるいは,複数のコマンドをパイプをかませて実現する方法でもかまいません. スクリプト言語すら使わないで実現できるような気がするのですが思いつきませんでした. よろしくお願いします.

  • UNIXでfindとls

    UNIXでファイルを検索するのにfindコマンドを使用してますが 情報として、パス名だけが表示されます。 >find . -name ghi -print ./ghi ./abc/def/ghi ./abc/def/ghi/ghi これを、ファイルのいろんな情報を見ることはできないでしょうか? パイプを使おうと思ったのですが、いまいちわかってなくて できませんでした。

  • RPMパッケージ管理の動作

    端末でrmp -q kernelを実行すると、バージョンの異なるいくつかのkernelが列挙されました。 このコマンドで行われた詳細を知りたいです。 どこからバージョン情報などを取ってくるのか詳しく知りたいです。 *.rpmを/から検索しましたが自分の力では分かりませんでした。 また、rmp -e kernelはカーネルをイレースするものらしいですが、-eオプションの詳細も教えてください。これはkernel*.rpmと、rpm -ql kernelで得られるたくさんのファイルも削除するということですか?