質問: Amazon Linuxでfindコマンドを実行して対象ファイルがパス以下にあるにも関わらず、ファイルはありませんと表示されてしまいます。 環境 Amazon Linux シェル bash 入力コマンド `find /usr/local/ "nginx.conf" | grep nginx` 出力結果 ``` 前略 /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': そのようなファイルやディレクトリはありません ``` ログの結果を確認すると確かに`nginx.conf`があるにも関わらず検索に失敗してしまいます。 どこに問題があるでしょうか? また、検索したファイルやフォルダが全て出力されてしまっているので、それを抑制するオプションはあるでしょうか?(ネットで確認しましたが見つからず、代替としてgrepしています。) この2点に関してご教授頂きたくよろしくお願いします。
回答: > > どこに問題があるでしょうか? > > > 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`と入力したらどうなるか、試してみてください。