次のようなコマンドを使用してサーバーをクエリしていました。
find ./ -type f -name 'filename"
私はで始まる多くのファイルを手に入れました
.//library
または
.//user
これらはどういう意味ですか?
それはあまり意味がありません:find
に与えたパターンは./
で、find
は、その結果をそのパスに接着します。 先頭のダブルスラッシュが一部のシステムで何らかの意味を持つ可能性があることを除いて、ダブルスラッシュは無視されます(シングルスラッシュとして扱われます)。さらに重要なのは、ポータブルプログラムがこの動作を想定していることです。
ただし、この特定の動作は、古いバージョンのfind
(OSXなど)を備えたBSD派生システムでのみ表示されます。 NetBSDは 2005 ;のソースでこれを修正しようとしました。 OSXのユーザーランドはolderです。
「最近の」FreeBSD、NetBSD、OpenBSDをチェックしても、この動作を引き起こすものはありません。 LinuxとUnix(AIX、HPUX、Solaris)も同様に機能しません。
参考文献:
検索-ファイルを検索 (POSIX)
find
ユーティリティは、pathで指定された各ファイルからディレクトリ階層を再帰的に下降し、見つかった各ファイルのOPERANDSセクション。各パスオペランドは、すべての末尾<slash>
を含め、提供されたとおりに変更なしで評価されます。文字;階層内で遭遇する他のファイルのすべてのパス名は、現在のパスオペランドの連結、<slash>
、現在のパスオペランドが1で終わっていない場合、およびパスオペランドに関連するファイル名。相対部分には、ドットまたはドットドットコンポーネント、末尾の<slash>
文字、パス名コンポーネント間の単一文字のみが含まれます。
Linuxは複数の連続するパス区切り文字(/ home //// username /// file)をどのように処理しますか?
.//
は現在のディレクトリを意味するため、出力の.//user
は現在の作業ディレクトリにあるファイルuser
を示します。
二重の//
は単一の/
に解決されるはずです。これは、私が使用したすべてのシステムに当てはまります。ただし、POSIXはこの動作を///
(またはそれ以上)、および/
に対してのみ定義しています。
find
の検索パスを通常の//
ではなく./
として使用したため、二重の.
が表示されます。どちらも現在の作業ディレクトリを示しており、どちらも正しいです。これは、相対パスの場合にその方法でパスを追加するfind
の動作です。 find
のこの特定の動作は、 この回答 で言及されているように、システムのサブセットでのみ一般的であり、おそらくその1つであることに注意してください。
.//
は./
と同じです
最初のスラッシュを超える連続したスラッシュには、意味上の意味がありません。