- ベストアンサー
findコマンドの成否
- Debian 7.6でfindコマンドを使用しているが、一部の場所では正常に検索が行えず困っている。どうすれば解決できるか教えてください。
- デスクトップの直下に001.txtが配置されている場合、cd ~/Desktopの後にfindコマンドを使用するとちゃんとファイルが見つかるが、USBメモリの場合は見つからない。解決策を教えてください。
- findコマンドを使用してファイルを検索する際に、一部の場所では正常に検索できない問題が発生しています。解決方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コマンドライン上の * は特別にファイルグロブの意味になっています。 何かファイルのあるディレクトリで、 echo * すると、意味がわかると思います。 すべてのファイル名にマッチするので、配下のファイル名がすべて表示されます。 したがって、ファイルグロブの意味でなく、コマンド固有の意味にしたいなら、 クォートしてエスケープする必要があります。 echo '*' のように。 質問の場合は、最後のは上手くいくはずと思いますが、 find . -name '*001*' とすれば良いのでは、と思います。
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
set -x とすると、実際に実行するコマンドが表示されるようになります。 > ちゃんと見つかってくれます というのは「たまたま」です。 ~/Desktop で touch 0012.txt の後で find . -maxdepth 10 -name *001* とやってみてください。エラーになるはずです。 > find . -maxdepth 10 -name "*" | grep 001 普通に考えたら、これは成功しそうです。 ちゃんとマウントできていますか? |grepを消してfindだけにしたり、 ls -R したりしたときに、ファイル一覧が出力されますか?
お礼
回答ありがとうございます。 回答が付いた時のメール通知をしていたつもりでしたが オフになっていましたようで、 お礼をつけるのが遅くなり申し訳ありません。 $ cd ~/Desktop/ $ touch 0012.txt $ find . -maxdepth 10 -name 001.txt ./001.txt $ find . -maxdepth 10 -name *001* find: paths must precede expression: 0012.txt Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] 確かに妙なメッセージが出ますね。 $ cd /media/8G $ find . -maxdepth 10 -name "*" | grep 001 ./001.txt なぜか、今これを試すときちんと見つけてくれました。 find . -maxdepth 10 -name "*" ls -R も言わずもがなです。
- Tacosan
- ベストアンサー率23% (3656/15482)
find . -maxdepth 10 -name *001* が何を意味するか, わかっていますか? あと, 確認ですが ls /media/8G/001.txt の結果はどうなっていますか?
お礼
回答ありがとうございます。 回答が付いた時のメール通知をしていたつもりでしたが オフになっていましたようで、 お礼をつけるのが遅くなり申し訳ありません。 . は現在のディレクトリで、 -maxdepth 10 は10階層の深さまで、ですが 回答No.3 の方が書かれていることが分かっておらず、 -name *001* はファイル名に「001」を含む全てのもの、と思っておりました。 ちなみに $ ls /media/8G/001.txt /media/8G/001.txt
お礼
回答ありがとうございます。 回答が付いた時のメール通知をしていたつもりでしたが オフになっていましたようで、 お礼をつけるのが遅くなり申し訳ありません。 おかげさまで原因がよく理解できました。 エスケープのことは全然存じておりませんでした。 No.2 の方の所にも書いてますが、 最後のが今はうまく行っています。 これは訳が分かりません。