• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:unixのfindコマンド)

unixのfindコマンドで指定のファイル名を検索し、grepする方法

このQ&Aのポイント
  • unixのfindコマンドを使用して、複数のディレクトリから指定のファイル名を検索し、その結果をgrepする方法について教えてください。
  • 特定のディレクトリの中の拡張子が*.txtのファイルを検索し、grepを実行する方法について教えてください。
  • Solaris 11.3上でのfindコマンドの使い方について教えてください。

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

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.3

> そこから、「0」で始まっているディレクトリの中なら拡張子が*.txtを これがカレントディレクトリだけの話なら find 0*_dir -name '*.txt' -exec grep "検索文字" '{}' + > find . -name "0*_dir" -type d -print | xargs ls -l *.txt | grep "検索文字" xargs 使うならファイル名が grep の引数に渡らないと意味ないので、 find 0*_dir -name '*.txt' | xargs grep "検索文字" /dev/null それから再帰的に 0*_dir/*.txt を探したいなら find `find . -type d -name '0*_dir'` -name '*.txt' -exec grep "検索文字" '{}' + -path が使えるなら (Solaris だと多分使えないけど) find . -path '*/0*_dir/*.txt' -exec grep "検索文字" '{}' +

abc999xyz
質問者

お礼

ありがとうございます。 findの方法を何種類か記載して頂いて勉強になります。 4番目の「-path 」を使うのは、Solarisでは使えません

その他の回答 (3)

  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.4

回答No.1の者です。 "xargs basename"の部分はmacOSで試したところでは動いていたのですが、Linuxでは"xargs basename -a"としないとエラーになりますね。Solarisのbasenameには-aオプションはないみたいです。 ところで、やりたかったことは結局(b)だったのですか?

abc999xyz
質問者

お礼

ありがとうございます。 ls 0*_dir/*.txt | xargs -i basename '{}' | grep "検索文字" としたら動きましたが、grepがうまくいきませでした。 ファイル名に対してgrepを行っていました。 本当はファイルの中身にgrepを行いたかったですが。 やりたかったことは、(b)案ですが、(b)案の結果をfindとgrepを使って やろうと考えていました。

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

やりたいことが不明瞭です。日本語の説明は明瞭ですが、コマンド例がそれとかけ離れているので。 > 「0」で始まっているディレクトリの中なら拡張子が*.txtを検索し、その検索したファイルに対して、grepを実行したいのですが、 という日本語だけを信じて回答すると、 grep "検索文字" 0*/*.txt か、 find `find -type d -name "0*" -print` -type f -name "*.txt" -print | xargs grep "検索文字"

abc999xyz
質問者

お礼

ありがとうござます。 grepの方法でも、findの方法でも結果が表示されました。 findの実行結果に、さらに、findをかぶせるのですね。 パイプだと展開されないのでできないですね。

  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.1

(a)ファイル名のリストに対してgrepしたいのか、(b)条件を満たしたファイルの中身に対してgrepしたいのか読み取れませんでしたが、もっと単純にこんな感じではどうでしょうか。 (a) ls 0*_dir/*.txt | xargs basename | grep "検索文字" (b) grep "検索文字" 0*_dir/*.txt

abc999xyz
質問者

お礼

ありがとうございました。

abc999xyz
質問者

補足

ありがとうございます。 (a)案は上手くいきませんでした。 Usage: basename string [ suffix ] がでます。 因みに、 ls 0*_dir/*.txt | xargs -i basename '{}' | grep "検索文字" としたら、 xargs: Could not exec command: No such file or directory となりました。 名前だけ渡しているからディレクトリがないので当たり前です。 (b)案は上手くいきました。 最初からgrepですればよかったのに思いつかなかったか。何をfindでと。

関連するQ&A