findで二重スラッシュを表示しても大丈夫ですか?

findで二重スラッシュを表示しても大丈夫ですか?

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/dirfind

ただし、この場合はより良いオプションがあります。

find -H some/dir

-Hls一部のPOSIXユーティリティ(、、、cp...)でサポートされているオプションで、ユーティリティに引数としてchmod渡されたシンボリックリンク(単に-L/と混同しないでください-follow)に従うように指示します。これにより、find次のようになります。すべてシンボリックリンク、引数として渡されたシンボリックリンク、ディレクトリナビゲーション中に見つかったシンボリックリンク)。

これは、実際には実際にはディレクトリではないものと機能的に同じではありませんfind some/dir/some/dirこの場合はfind some/dir/失敗します。ディレクトリではありませんエラーには、find -H some/dirディレクトリ以外のファイルも一覧表示されます。

関連情報