• ベストアンサー

シェル find 複数条件で

hoge という名前のディレクトリ もしくは koge という名前のファイルを見つける find 文を教えて下さい。 hoge というディレクトリというだけの条件ならわかるのですが、 find ./ -type d -and -name hoge if文でいうところの条件をカッコで囲いたくなるような場合の書き方がわかりません。

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

  • ベストアンサー
  • freetaka
  • ベストアンサー率53% (106/197)
回答No.2

シンプルに書くなら or で次の条件を書いてあげると 複数条件の指定をすることができます or の部分はオプションで -or または -o のどちらか 自分の好みで書いてください find ./ -type d -name hoge -or -type f -name koge

muuming2001
質問者

お礼

ありがとうございます。

その他の回答 (1)

回答No.1

find ./ \( -type d -name "hoge" -o -type f -name "koge" \) -print こんな感じでいかがでしょ。

muuming2001
質問者

お礼

ありがとうございます。

関連する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 コマンド(Unix)

    find コマンドで検索条件をANDで結んだりしたいのですが、うまくいきません。 あるサイトをまねて、find . -name abc -and -type d とやったのですが、-andでエラーメッセージが出てしまいます。(エラーメッセージはfind: bad option -andとfind:path-list predicate-list)-orの場合でも同じです。kshを使ってます。-and を使わないでfind . -name abcの時はきちんと検索できます。どなたか分かる方回答お願いします。

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

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

  • findの使用方法2

    find . -type d ! -perm 770 -o -perm 750 上記の文をBshにて実行したのですが、ディレクトリのみの出力って出来ないのでしょうか? 現在だと、マッチしたディレクトリ配下のファイルまで表示されてしまいます。 ご存知の方がいらっしゃいましたら、教えてくださいませ。

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

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

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

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

  • unixのfindコマンドについて。

    unix(AIX)のfindコマンドで「find ./ -type f」というコマンドで一覧を取得しています。 「./」の中に「hogehoge -> /tmp/test」というような シンボリックリンクを使用しているディレクトリがある場合も、 「./hogehoge/hoge.log」 というように表示させるにはどうすれば良いでしょうか。 ご回答の程、宜しくお願い致します。

  • UNIXの"find"コマンド同等のプログラム作成について

    お世話になっております。 現在UNIXの"-type f"オプションのついた"find"コマンドと同等のプログラムをC言語で作ろうとしています。 つまりディレクトリ内のファイル(サブディレクトリ内のファイル含む、ディレクトリは除外)を全てフルパスで表示するプログラムです。 現在下記の関数を作成したのですがうまく動いてくれません。 どなたかご教授いただけないでしょうか。 【問題】 プログラム内の(**)前後で"dir1"が変更される。 (**)前:"/ディレクトリA/" (**)後:"/ディレクトリA/ディレクトリA内のファイル1" 本当は"dir1"には:"/ディレクトリA/"のままであってほしいです。 "strcat"コマンドの仕様が影響しているのでしょうか。 int _find(char dir1[] , int k ,int l , int m ) { DIR *dir ; struct dirent *dp ; struct stat statbuf ; char txt[1000] ; if ( m == 0 ) l++ ; if ( (dir = opendir(dir1)) == NULL ){ printf("%s",dir1) ; perror("opendir") ; exit(1) ; } for( dp=readdir(dir) ; dp != NULL ; dp=readdir(dir) ){ if ( strcmp(dp->d_name,".") != 0 && strcmp(dp->d_name,"..") != 0 ){ /* ROOT_DIR名-にファイル名を付け加えて、フルパスにする */ strcpy( temp[k][l] , dir1) ; strcat( temp[k][l] , "/" ) ; strcat( temp[k][l] , dp->d_name ) ;  (**) stat( temp[k][l] , &statbuf ) ; if(S_ISDIR(statbuf.st_mode)){ l=_find(temp[k][l],k,l,1) ; }else{ sort[k][l]=temp[k][l] ; printf("temp[%d][%d]=%s\n",k,l,sort[k][l]); printf( "dir5=%s\n",dir1) ; l++ ; } } } closedir(dir) ; return l ; }

  • シェルスクリプトの内容について

    業務で使用しているシェルスクリプトの中身に find A/B/ -name File1 -exec mv {}/C/D \; ※AとBとCとDはディレクトリ名、File1はファイル名   という記述があってfindによる検索結果をmvの引数に持ってきて C/D/の直下にFile1を移動している意味はわかったのですが最後尾にある「¥」の意味がよくわかりません。 よろしくお願いします。

  • 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 \{\} \; とか色々試してみたのですが、 恐らく行数?が表示されるようで、自分が期待した結果を得ることが できません。 条件で検出したディレクトリ以下のファイル数を、ディレクトリ毎に表示させるには、 どうしたらよいのでしょうか。