• ベストアンサー

シェルのfindコマンドであるディレクトリ以外のファイルを検索

ホームディレクトリにある.(例.dtや.atok)ディレクトを検索対象から外し尚且つ、*aa*のファイルを検索するにはどうしたら良いでしょうか? find . -type d -name .dt -prune -o -print | xargs grep "*aa*" でいろいろやってみましたができませんでした。 OS:HP-UX K-Shellです どうぞ宜しくお願いいたします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

安易な手としては、 find . -type f -print | grep -v './.atok/' | xargs grep "*aa*" "*aa*" は正規表現として正しくないですが、意図したことがわからないのでそのままにしてあります。

ruru-kei
質問者

お礼

お礼が遅れてすみません。。。 ポイントの手続きはしたものの、御礼を記述を忘れてしまいました。すみません。m(_ _)m grep -v './.atok/'は思いつきませんでした! ありがとうございました。

関連するQ&A

  • unixのfindコマンド

    unixのfindコマンドで、ある複数のディレクトリから指定のファイル名だけを 検索し、その結果をgrepしたいのですが、 例えば 01_dir 02_dir : 11_di : 21_dir : と言うディレクトリがあります。 そこから、「0」で始まっているディレクトリの中なら拡張子が*.txtを 検索し、その検索したファイルに対して、grepを実行したいのですが、 上手くいきません。 もちろん、各ディレクトリには、「.txt」以外のファイルもありますし、 ファイル名にも条件を付与したいです。 以下の様に、 find . -name "0*_dir" -type d -print | xargs ls -l *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs ls *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls -l '{} /*.txt' | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls {} "検索文字" とやってみたのですがだめでした。 find ./ -type d \( -name '1_*dir' -o -name '2*_dir' -o -name '3*_dir' \) -prune -o -type f -print と「-prune」で除外するディレクトリを指定すればできなくはないですが、 すべてのディレクトリ書くのはいい方法ではないです。 よい方法をお願いします。 OSは、Solaris 11.3です。

  • ファイルを検索するコマンド findの使い方

    ファイル名にある文字列を含むファイルの検索の仕方がわかりません.具体的にはsolという文字列を含むファイルの検索です.確かfind -name なんとかだったような気がするのですがよくわかりません.ディレクトリはいろいろで拡張子は不明です.よろしくお願いします.

  • ある特定のディレクトリの特定の文字を含むファイルを検索するには

    Debian Linuxでbashスクリプトを記述しています。 特定のディレクトリ(1つの階層)にある ".abc"で始まる隠しファイルの一覧と、 それぞれのファイル内容を取得したいのですが ・サブディレクトリも検索してしまう。  find の-pruneやmaxdepthがききません。 lsで記述しなおしましたが ・結果を確認すると、6回同じ内容を記述しています。  正規表現が正しくないと思い書きなおしていますがうまくいきません。 target=/var/test filename=$(ls -a ${target} -name | grep '\.abc' | grep -v "~") kugirimoji="------" for i in $filename ; do echo $i cat $i echo $kugirimoji done どこを直せば、単一ディレクトリの特定ファイルの一覧を検索できるでしょうか。 同じ内容を複数回吐き出すのは、やはり正規表現が間違っているからでしょうか。 ぜひ教えて下さい。 どうぞよろしくお願い致します。

  • 古いファイルを含むディレクトリのリネーム

    古いファイルを含むディレクトリのリネーム Linuxサーバのファイル整理の目的で 指定ディレクトリ以下の階層の複数フォルダについて 古い画像ファイル(90日以上変更がない".jpg"ファイル)しかないものは (1)ディレクトリ名をリネーム(ディレクレトリ名末尾に"_deleted"を追加) (2)ディレクトリ内の古いファイルを削除 したいと考えております。 find と xargs をつなげてあげれば、(2)単体であればできるのですが ex.) find . -type f -ctime +90 -print0 | xargs -0 rm 「格納されている全てのファイルが対象となる場合」に「ディレクトリ名をリネームして」 という処理で悩んでおります。 皆様、アドバイスの程お願い致します。 ========================================== 環境: ========================================== OS: CentOS5.4 bashなどを利用して,簡易的に実行できればと考えております。

  • find 指定ディレクトリ以下のファイル数をディレクトリ毎に表示させたい

    ■前提例 ./public_html/rails/modules/abcde/cache/hoge/file1 ./public_html/rails/modules/abcde/cache/file2 ./public_html/ruby/modules/wiki/private/cache/file3 ./net/cache/file4 ./n/abcde/cache/file5  : 以下略 ■期待しているのは、下記二つのディレクトリを検出し、かつそのディレクトリ以下のファイル数を、ディレクトリ毎に表示させたいのですが、 2./public_html/rails/modules/abcde/cache/ 1./n/abcde/cache/  : もしくは、 2./public_html/rails/modules/abcde/cache/hoge/file1 2./public_html/rails/modules/abcde/cache/file2 1./n/abcde/cache/file5  : ■実際に下記コマンドを実行すると、 find . -type f -regex '.*/abcde/cache/.*' -print | wc -l 4503 という数値(恐らくファイル数?)が返ってくるのみです。 ググッてみて、 find . -type f -regex '.*/abcde/cache*/.*' | xargs wc -l find . -type f -regex '.*/abcde/cache/.*' -print | xargs wc -l find . -type f -regex '.*/abcde/cache/.*' -exec wc -l \{\} \; とか色々試してみたのですが、 恐らく行数?が表示されるようで、自分が期待した結果を得ることが できません。 条件で検出したディレクトリ以下のファイル数を、ディレクトリ毎に表示させるには、 どうしたらよいのでしょうか。

  • findコマンドで複数条件を設定する方法

    findコマンドを使用して、最終更新日から10日以上経過しているかつ、拡張子が.gz 以外のファイルを圧縮する方法を教えていただきたいです。 それぞれ1つの条件を満たすコマンドはわかるのですが、2つの条件を満たすコマンドをどの様に作成すればよいかわかりません。 最終更新日から10日以上経過したファイルを圧縮 find . -mtime +10 -exec gzip {} ¥; 拡張子が.gz意外のファイルを圧縮 find . -name "*.gz" -prune -o -type f -print -exec gzip {} ¥; よろしくお願いします。

  • ファイルを検索して削除する

    /www 以下のディレクトリーに aaa.txt というファイルが存在する場合、 そのファイルが存在するディレクトリー内の全ての ***.txt を削除したいです。 find /www -name aaa.txt | xargs rm だと、aaa.txt だけの削除になります。 以下も考えましたが、これだと検索対象ディレクトリーが /www だけになります。 #!/bin/bash if test -e /www/aaa.txt then rm -f /www/*.txt fi どのように記述するとよいでしょうか。

  • findで複数の場所から検索

    findで  /dir1 または /dir2 (さらには /dir3 も)からのファイルの検索はどのように書けばいいでしょうか? $ find "/dir1|/dir2" -name "nanashi" find: `/dir1|/dir2': そのようなファイルやディレクトリはありません $ find (/dir1|/dir2) -name "nanashi" bash: 予期しないトークン `/dir1' 周辺に構文エラーがあります よろしくお願いします。

  • grepでの抽出箇所のみ置換して上書き

    例えば find ./ -name file_name -exec grep -B 2 "earth" {} \; -print | grep "moon" というコマンドを実施し、出力が planetkind moon だったとします。 このfile_nameファイルの一部にある 『 planetkind moon』 という箇所を 『 planetkind taiyo』 に変更したいのですが、 find ./ -name file_name -exec grep -B 2 "earth" {} \; -print | grep "moon" | xargs sed -i "s/moon/taiyo/" とすると、ファイル中の全てのmoonがtaiyoになってしましまいます。 このgrepでの抽出箇所のみ置換して元ファイルを上書きする方法は有りますか? 以上、宜しくお願いいたします。

  • SJISファイルを日本語でgrep

    UNIX環境で、 SJISファイルを日本語でgrepしたのですが、 ファイル名が出力されずにうまくいきません。 どなたかご教授願えないでしょうか。 [自分のコマンド] find ./ -type f -print | xargs nkf -e | grep 'テスト' とし、日本語は検地できたのですが、 ファイル名が出力されずに困っております。 grep -l としたら、↓のエラーが表示されました。 xargs: nkf: シグナル 13 によって終了しました サブディレクトリも含めて検地したいのですが、 なにかいい方法ありますでしょうか。

専門家に質問してみよう