次のような場合、これはバグでしょうかfind ./path/here/
:
./path/here//foo
./path/here//bar
末尾のスラッシュなしでパスを指定する必要があることはわかっていますfind
が、タブ補完によって残されたパスを検出し、それに応じて出力を調整できるはずです。そうしない理由はあるのでしょうか?
答え1
技術的には、それはバグです。POSIXの状態それ
階層内で遭遇する他のファイルのパス名はすべて、現在のパスオペランドと<スラッシュ>の連結で構成されるものとする。現在のパスオペランドが1で終わっていない場合、およびパスオペランドに対するファイル名の相対値
しかし二重スラッシュは意味がないなので、./path/here//foo
と は./path/here/foo
常に同じファイルです。(一部の Unix 系 OS では、パスの先頭に二重スラッシュがあると違いが生じます。その場合は、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
ディレクトリ以外のファイルをリストするときにエラーが発生しました。