ファイルがローカルかどうかをテストする

ファイルがローカルかどうかをテストする

ファイルがネットワークインストールからインポートされたのか、実際のローカルファイルからインポートされたのかをスクリプトでテストする必要があります。より明確に言えば、コンテンツの解析が高速か遅いかをテストする必要がありますが、私が考える限り、ローカルとネットワークは信頼できる指標です。

私が思いついた最善の方法は、ローカルディスクにファイルをstat -c %m [path]提供するパスのマウントポイントとCIFSマウントのマウントポイントを取得することです。/

しかし、これは非常に単純な構成(ローカルドライブ1台、大容量パーティション1台、ネットワークインストール数台)以外は信頼できる診断ではないと考えられるので、強力で標準的なアプローチを望んでいます。検索しても役に立つ手がかりは出ませんでした。 「ネットワーク」や「パス」などの用語が多すぎます。

答え1

次のコマンドを使用して、特定のファイルまたはディレクトリを含むファイルシステムの種類を出力できます。

 stat -f --format="%T" /path/to/file

そしてそれに従って行動しなさい。可能な出力はcifs、、、、...(リモートと仮定)と、(原文 - ext2、ext3、およびext4のファイルシステムマジック番号が等しい)、、、... nfs(ローカルと仮定)です。afsufsext2/ext3btrfstmpfs

ファイルシステムの種類がローカルであるかリモートであるかを判断するのに役立つ1つ:およびをstat含むGNU coreutilsdfには、数十種類のファイルシステムタイプの「ローカル」および「リモート」ファイルシステムの概念があります。

df -T -l | awk 'NR > 1 { print $2 }' | sort -u

ローカルと見なされるすべてのマウントされたファイルシステムを出力するファイルシステムの種類df

元の質問の説明で指摘したように、記憶装置がローカルであるかどうかは言い難い。ファイルext3システムは/dev/sdb5ファイバチャネルデバイスにあり、直接接続することも、複数のネットワークスイッチに配置することもできます。標準ユーザーレベルユーティリティを使用して識別する可能性はほとんどありません。

関連情報