find ./path/here/
私が得るとき、これはバグですか?
./path/here//foo
./path/here//bar
末尾のスラッシュなしでパスを指定したいことを知っていますが、find
タブの完成によって残りのパスを確実に検出し、それに応じて出力を調整できます。これをしない理由はありますか?
答え1
技術的にはこれはエラーです。POSIXステータスそれ
階層で見つかった他のファイルへのすべてのパス名は、現在のパスオペランド<スラッシュ>の接続で構成されます。現在のパスオペランドが1で終わらない場合およびパスオペランドに基づくファイル名
しかし、二重スラッシュには違いはありません、したがって、./path/here//foo
と./path/here/foo
は常に同じファイルです。 (一部のUnixバリアントでは、デュアルスラッシュがパスの先頭にある場合は違いがあります。そうであれば、find
そのケースを特別に処理する必要があります。)
答え2
ちなみに、代わりにfind some/dir/
使用できる理由の1つは、実際にはディレクトリへのシンボリックリンクであり、実際にシンボリックリンクが指すディレクトリでファイルを探したい場合find some/dir
です。some/dir
find
ただし、この場合はより良いオプションがあります。
find -H some/dir
-H
ls
一部のPOSIXユーティリティ(、、、cp
...)でサポートされているオプションで、ユーティリティに引数としてchmod
渡されたシンボリックリンク(単に-L
/と混同しないでください-follow
)に従うように指示します。これにより、find
次のようになります。すべてシンボリックリンク、引数として渡されたシンボリックリンク、ディレクトリナビゲーション中に見つかったシンボリックリンク)。
これは、実際には実際にはディレクトリではないものと機能的に同じではありませんfind some/dir/
。some/dir
この場合はfind some/dir/
失敗します。ディレクトリではありませんエラーには、find -H some/dir
ディレクトリ以外のファイルも一覧表示されます。