- ベストアンサー
シェル find 複数条件で
hoge という名前のディレクトリ もしくは koge という名前のファイルを見つける find 文を教えて下さい。 hoge というディレクトリというだけの条件ならわかるのですが、 find ./ -type d -and -name hoge if文でいうところの条件をカッコで囲いたくなるような場合の書き方がわかりません。
- muuming2001
- お礼率68% (711/1039)
- Linux系OS
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
シンプルに書くなら or で次の条件を書いてあげると 複数条件の指定をすることができます or の部分はオプションで -or または -o のどちらか 自分の好みで書いてください find ./ -type d -name hoge -or -type f -name koge
その他の回答 (1)
- CheshireCleaf
- ベストアンサー率50% (1/2)
find ./ \( -type d -name "hoge" -o -type f -name "koge" \) -print こんな感じでいかがでしょ。
お礼
ありがとうございます。
関連する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です。
- ベストアンサー
- Solaris系OS
- 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' 周辺に構文エラーがあります よろしくお願いします。
- ベストアンサー
- Linux系OS
- findの使用方法2
find . -type d ! -perm 770 -o -perm 750 上記の文をBshにて実行したのですが、ディレクトリのみの出力って出来ないのでしょうか? 現在だと、マッチしたディレクトリ配下のファイルまで表示されてしまいます。 ご存知の方がいらっしゃいましたら、教えてくださいませ。
- ベストアンサー
- その他(OS)
- findコマンドで複数条件を設定する方法
findコマンドを使用して、最終更新日から10日以上経過しているかつ、拡張子が.gz 以外のファイルを圧縮する方法を教えていただきたいです。 それぞれ1つの条件を満たすコマンドはわかるのですが、2つの条件を満たすコマンドをどの様に作成すればよいかわかりません。 最終更新日から10日以上経過したファイルを圧縮 find . -mtime +10 -exec gzip {} ¥; 拡張子が.gz意外のファイルを圧縮 find . -name "*.gz" -prune -o -type f -print -exec gzip {} ¥; よろしくお願いします。
- ベストアンサー
- Linux系OS
- シェルの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」 というように表示させるにはどうすれば良いでしょうか。 ご回答の程、宜しくお願い致します。
- 締切済み
- Linux系OS
- 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 ; }
- ベストアンサー
- C・C++・C#
- シェルスクリプトの内容について
業務で使用しているシェルスクリプトの中身に find A/B/ -name File1 -exec mv {}/C/D \; ※AとBとCとDはディレクトリ名、File1はファイル名 という記述があってfindによる検索結果をmvの引数に持ってきて C/D/の直下にFile1を移動している意味はわかったのですが最後尾にある「¥」の意味がよくわかりません。 よろしくお願いします。
- 締切済み
- Solaris系OS
- 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 \{\} \; とか色々試してみたのですが、 恐らく行数?が表示されるようで、自分が期待した結果を得ることが できません。 条件で検出したディレクトリ以下のファイル数を、ディレクトリ毎に表示させるには、 どうしたらよいのでしょうか。
- ベストアンサー
- Linux系OS
お礼
ありがとうございます。