プロが教えるわが家の防犯対策術!

OS は Debian 7.6 ですが、

~/Desktop の直下に 001.txt を配置しているのですが、
$ cd ~/Desktop
の後に次のコマンドを打つと
$ find . -maxdepth 10 -name *001*
./001.txt
と、ちゃんと見つかってくれます。
ちなみに
-maxdepth 10
は念のためにつけておいたものです。

/media/8G でマウントされているUSBメモリの直下に 001.txt を配置していても
$ cd /media/8G
の後に
$ find /media/8G -maxdepth 10 -name *001*
$ find . -maxdepth 10 -name * | grep 001
$ find . -maxdepth 10 -name "*" | grep 001
のいずれを試しても、001.txt を見つけてくれません。

なぜこうなるのかサッパリわかりません。
どうしたらいいかお教え下さい。
よろしくお願いします。

A 回答 (3件)

コマンドライン上の * は特別にファイルグロブの意味になっています。


何かファイルのあるディレクトリで、
echo *
すると、意味がわかると思います。
すべてのファイル名にマッチするので、配下のファイル名がすべて表示されます。
したがって、ファイルグロブの意味でなく、コマンド固有の意味にしたいなら、
クォートしてエスケープする必要があります。
echo '*'
のように。
質問の場合は、最後のは上手くいくはずと思いますが、
find . -name '*001*'
とすれば良いのでは、と思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

回答が付いた時のメール通知をしていたつもりでしたが
オフになっていましたようで、
お礼をつけるのが遅くなり申し訳ありません。

おかげさまで原因がよく理解できました。
エスケープのことは全然存じておりませんでした。
No.2 の方の所にも書いてますが、
最後のが今はうまく行っています。
これは訳が分かりません。

お礼日時:2014/08/14 02:47

set -x


とすると、実際に実行するコマンドが表示されるようになります。

> ちゃんと見つかってくれます

というのは「たまたま」です。
~/Desktop で
touch 0012.txt
の後で
find . -maxdepth 10 -name *001*
とやってみてください。エラーになるはずです。


> find . -maxdepth 10 -name "*" | grep 001

普通に考えたら、これは成功しそうです。
ちゃんとマウントできていますか?
|grepを消してfindだけにしたり、 ls -R したりしたときに、ファイル一覧が出力されますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

回答が付いた時のメール通知をしていたつもりでしたが
オフになっていましたようで、
お礼をつけるのが遅くなり申し訳ありません。

$ 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
も言わずもがなです。

お礼日時:2014/08/14 02:47

find . -maxdepth 10 -name *001*


が何を意味するか, わかっていますか?

あと, 確認ですが
ls /media/8G/001.txt
の結果はどうなっていますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

回答が付いた時のメール通知をしていたつもりでしたが
オフになっていましたようで、
お礼をつけるのが遅くなり申し訳ありません。

.
は現在のディレクトリで、
-maxdepth 10
は10階層の深さまで、ですが
回答No.3 の方が書かれていることが分かっておらず、
-name *001*
はファイル名に「001」を含む全てのもの、と思っておりました。

ちなみに
$ ls /media/8G/001.txt
/media/8G/001.txt

お礼日時:2014/08/14 02:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!