22487


Amazon Linuxでfindコマンドを実行して対象ファイルがパス以下にあるにも関わらず、ファイルはありませんと表示されてしまいます。

環境  
Amazon Linux  
シェル bash

入力コマンド  
`find /usr/local/ "nginx.conf" | grep nginx`

出力結果

[code]

    前略
    /usr/local/nginx/conf/koi-win
    /usr/local/nginx/conf/uwsgi_params.default
    /usr/local/nginx/conf/nginx.conf
    /usr/local/nginx/conf/fastcgi.conf
    /usr/local/nginx/conf/scgi_params
    後略
    find: `nginx.conf': そのようなファイルやディレクトリはありません
    
[/code]

ログの結果を確認すると確かに`nginx.conf`があるにも関わらず検索に失敗してしまいます。  
どこに問題があるでしょうか？  
また、検索したファイルやフォルダが全て出力されてしまっているので、それを抑制するオプションはあるでしょうか？(ネットで確認しましたが見つからず、代替としてgrepしています。)

この2点に関してご教授頂きたくよろしくお願いします。


CC BY-SA 3.0
2016-02-24T11:41:54.847
22486
2016-02-25T01:53:36.897
12232
question
linux bash
Linuxコマンドfind で検索したファイルがあるにも関わらず、そのようなファイルはありませんと表示される


> どこに問題があるでしょうか？

findコマンドのmanページなどをよーく(かなりじっくり読まないとわかりません)読んでください。

> **SYNOPSIS  
>  find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]  
>  find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]**

あなたのfindコマンド`find /usr/local/
"nginx.conf"`で示した2つの引数`/usr/local/`と`"nginx.conf"`は、どちらもpathとして扱われます。

findコマンドは「ファイル名による検索」に特化したコマンドではなく、ファイルがらみの様々な条件を指定して指定されたpath内を検索するコマンドです。つまり、あなたの`find
/usr/local/ "nginx.conf"`は、 **条件なし**
で「ファイルまたはディレクトリ/usr/local/」と「ファイルまたはディレクトリnginx.conf」の2つのpathを検索することを指示していることになります。  
あなたがそのコマンドを入力した時のカレントディレクトには2つめのpathとして示した「nginx.conf」が存在しないため「そのようなファイルやディレクトリはありません」と言われている訳です。

> 検索したファイルやフォルダが全て出力されてしまっているので、それを抑制するオプションはあるでしょうか？

上に示した事柄を理解していただければわかると思うのですが、「検索したファイルやフォルダが全て出力されてしまっている」訳ではありません。条件を指定していないから、あなたが指定したpathの1つ目`/usr/local/`内のファイルやフォルダが全て全てヒットしてしまっている訳です。

コメントにありますように`find /usr/local/ -name nginx.conf`と入力したらどうなるか、試してみてください。


CC BY-SA 3.0
2016-02-24T12:25:59.337
22487
2016-02-25T01:53:36.897
2016-02-25T01:53:36.897
5793
13972
22486
answer