- PR -

フォルダを検索する方法

投稿者投稿内容
D.Matsu
ベテラン
会議室デビュー日: 2006/12/07
投稿数: 51
投稿日時: 2007-01-23 07:00
引用:

カメ吉SEさんの書き込み (2007-01-22 17:13) より:
コマンドをためしてみましたが、別のMSGが表示されました。
コード:
$ find . -name 'src*' -type d
find invalid predicate '-name'



最初に記述するのを忘れていましたが、CygWinでコマンドを打っています。



コマンド及び引数の正当性はCygwinで確認しましたので、このパラメータで動かないという事はないはずです。
エラーメッセージはCygwin findのもののようですので、もう一度引数を確認してください。
ペンちゃん
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 61
投稿日時: 2007-01-23 09:29
引用:

カメ吉SEさんの書き込み (2007-01-22 17:13) より:
コマンドをためしてみましたが、別のMSGが表示されました。
コード:
$ find . -name 'src*' -type d
find invalid predicate '-name'





たおさんが答えてくれていますが、Windowsのfindコマンドを使っている可能性を
検証してみるといいかもです。

参考ページ(Googleで「Cygwin findコマンド」を検索するといくつか見つかりました)
http://www.sixnine.net/cygwin/translation/faq/faq_3.html#SEC38

これでWindowsのfindコマンドを使っていた場合は環境変数PATHをいじるなり、フルパスで指定して実行してみるとうまくいくかもです。
がんばってください。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-01-23 10:47
余談です。

今までの話の流れからすると、Windowsのfind.exeではなく、Cygwinのfindを使っているように見えます。
“find src*”でエラーとなったのは、
 シェル:src* を展開しようと試みる → ないので展開できず、src* のまま
 find:'src*' というディレクトリの下を検索すると判断、ディレクトリがないためエラー
また、“Invalid predicate”というエラーも、Cygwin find の出すエラーですね。
とはいえ、PATH環境変数を調べたり、type や which で、どの find が使われているかは確認した方が良いと思います。

で、根本原因としては、やはり入力が何かマズいのではないかと思います。
文字として見えない部分にトラブルの元がある場合もありますので、何度やってもエラーになる場合は、エラーメッセージのダンプを取ってみると良いでしょう。
具体的には、コマンドの後ろに“ 2>&1 >/dev/null | od -t o1c”を追加します。

例えば、“-name”の代わりに、間違えて“-namE”とした場合は、
コード:
$ find . -namE 'src*' -type d 2>&1 >/dev/null | od -t o1c
0000000 146 151 156 144 072 040 151 156 166 141 154 151 144 040 160 162
          f   i   n   d   :       i   n   v   a   l   i   d       p   r
0000020 145 144 151 143 141 164 145 040 140 055 156 141 155 105 047 012
          e   d   i   c   a   t   e       `   -   n   a   m   E   '  \n
0000040


のような出力になります。
Ay
常連さん
会議室デビュー日: 2006/10/29
投稿数: 45
投稿日時: 2007-01-24 00:18
こんばんわ
引用:

カメ吉SEさんの書き込み (2007-01-22 17:13) より:

コマンドをためしてみましたが、別のMSGが表示されました。
コード:
$ find . -name 'src*' -type d
find invalid predicate '-name'




これは、cygwinのウインドウに入力したもの・出力されたものをコピー&ペーストしたものですか?
-name をスペルミスしたために出力されてる気がします…

コード:
$ find . -nama 'src*' -type d
find: invalid predicate `-nama' 


こんな感じで。
カメ吉SE
常連さん
会議室デビュー日: 2006/07/09
投稿数: 34
投稿日時: 2007-01-26 01:19
ひでさん
たおさん
D.Matsuさん
ペンちゃんさん
angelさん
Ayさん
ご返答ありがとうございます。


引用:

D.Matsuさんの書き込み (2007-01-23 07:00) より:
コマンド及び引数の正当性はCygwinで確認しましたので、このパラメータで動かないという事はないはずです。
エラーメッセージはCygwin findのもののようですので、もう一度引数を確認してください。


ご指摘のとうり、実行できました。
(一部抜粋)
コード:
$ find . -name 'src*' -type d
./cygdrive/c/apache-tomcat-5.5.15/webapps/tomcat-docs/appdev/sample/src
./cygdrive/c/cygwin/lib/postgresql/pgxs/src
./cygdrive/c/cygwin/usr/share/doc/boost-1.33.1-2/libs/graph/src
./cygdrive/c/cygwin/usr/share/TeXmacs/examples/plugins/complete/src
./cygdrive/c/cygwin/usr/share/TeXmacs/examples/plugins/dynlink/src
./cygdrive/c/cygwin/usr/share/TeXmacs/examples/plugins/formula/src
./cygdrive/c/cygwin/usr/share/TeXmacs/examples/plugins/handler/src
./cygdrive/c/cygwin/usr/share/TeXmacs/examples/plugins/input/src




引用:

ペンちゃんさんの書き込み (2007-01-23 09:29) より:
たおさんが答えてくれていますが、Windowsのfindコマンドを使っている可能性を
検証してみるといいかもです。
参考ページ(Googleで「Cygwin findコマンド」を検索するといくつか見つかりました)
http://www.sixnine.net/cygwin/translation/faq/faq_3.html#SEC38
これでWindowsのfindコマンドを使っていた場合は環境変数PATHをいじるなり、フルパスで指定して実行してみるとうまくいくかもです。
がんばってください。


難しいかもしれませんが、色々とためしてみます。


引用:

angelさんの書き込み (2007-01-23 10:47) より:
余談です。

今までの話の流れからすると、Windowsのfind.exeではなく、Cygwinのfindを使っているように見えます。
“find src*”でエラーとなったのは、
 シェル:src* を展開しようと試みる → ないので展開できず、src* のまま
 find:'src*' というディレクトリの下を検索すると判断、ディレクトリがないためエラー
また、“Invalid predicate”というエラーも、Cygwin find の出すエラーですね。
とはいえ、PATH環境変数を調べたり、type や which で、どの find が使われているかは確認した方が良いと思います。

で、根本原因としては、やはり入力が何かマズいのではないかと思います。
文字として見えない部分にトラブルの元がある場合もありますので、何度やってもエラーになる場合は、エラーメッセージのダンプを取ってみると良いでしょう。
具体的には、コマンドの後ろに“ 2>&1 >/dev/null | od -t o1c”を追加します。

例えば、“-name”の代わりに、間違えて“-namE”とした場合は、
コード:
$ find . -namE 'src*' -type d 2>&1 >/dev/null | od -t o1c
0000000 146 151 156 144 072 040 151 156 166 141 154 151 144 040 160 162
          f   i   n   d   :       i   n   v   a   l   i   d       p   r
0000020 145 144 151 143 141 164 145 040 140 055 156 141 155 105 047 012
          e   d   i   c   a   t   e       `   -   n   a   m   E   '  n
0000040


のような出力になります。


サンプルのコマンドを実行し、同じ結果になりました。
findコマンド自体は正常に動作しました。
コード:
$ find . -namE 'src*' -type d 2>&1 > /dev/null | od -t o1c
0000000 146 151 156 144 072 040 151 156 166 141 154 151 144 040 160 162
          f   i   n   d   :       i   n   v   a   l   i   d       p   r
0000020 145 144 151 143 141 164 145 040 140 055 156 141 155 105 047 012
          e   d   i   c   a   t   e       `   -   n   a   m   E   '  \\n
0000040



自分の質問に対し、ご教授のほど感謝致します。
コマンドの入力ミスにより発生した可能性もあります、申し訳ありません。
皆様のご指導によりコマンドを入力した結果、正常な動作をしました。
また、ご質問等を投稿時には、今後もなにとぞ宜しくお願いいたします。
ご指摘して頂きました、皆様には本当にありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)