- ベストアンサー
unixのfindコマンドで指定のファイル名を検索し、grepする方法
- unixのfindコマンドを使用して、複数のディレクトリから指定のファイル名を検索し、その結果をgrepする方法について教えてください。
- 特定のディレクトリの中の拡張子が*.txtのファイルを検索し、grepを実行する方法について教えてください。
- Solaris 11.3上でのfindコマンドの使い方について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> そこから、「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 "検索文字" '{}' +
その他の回答 (3)
- _kappe_
- ベストアンサー率68% (1581/2304)
回答No.1の者です。 "xargs basename"の部分はmacOSで試したところでは動いていたのですが、Linuxでは"xargs basename -a"としないとエラーになりますね。Solarisのbasenameには-aオプションはないみたいです。 ところで、やりたかったことは結局(b)だったのですか?
お礼
ありがとうございます。 ls 0*_dir/*.txt | xargs -i basename '{}' | grep "検索文字" としたら動きましたが、grepがうまくいきませでした。 ファイル名に対してgrepを行っていました。 本当はファイルの中身にgrepを行いたかったですが。 やりたかったことは、(b)案ですが、(b)案の結果をfindとgrepを使って やろうと考えていました。
- notnot
- ベストアンサー率47% (4900/10358)
やりたいことが不明瞭です。日本語の説明は明瞭ですが、コマンド例がそれとかけ離れているので。 > 「0」で始まっているディレクトリの中なら拡張子が*.txtを検索し、その検索したファイルに対して、grepを実行したいのですが、 という日本語だけを信じて回答すると、 grep "検索文字" 0*/*.txt か、 find `find -type d -name "0*" -print` -type f -name "*.txt" -print | xargs grep "検索文字"
お礼
ありがとうござます。 grepの方法でも、findの方法でも結果が表示されました。 findの実行結果に、さらに、findをかぶせるのですね。 パイプだと展開されないのでできないですね。
- _kappe_
- ベストアンサー率68% (1581/2304)
(a)ファイル名のリストに対してgrepしたいのか、(b)条件を満たしたファイルの中身に対してgrepしたいのか読み取れませんでしたが、もっと単純にこんな感じではどうでしょうか。 (a) ls 0*_dir/*.txt | xargs basename | grep "検索文字" (b) grep "検索文字" 0*_dir/*.txt
お礼
ありがとうございました。
補足
ありがとうございます。 (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でと。
お礼
ありがとうございます。 findの方法を何種類か記載して頂いて勉強になります。 4番目の「-path 」を使うのは、Solarisでは使えません