statまたはbashを使用してFILENAMEがファイルを参照しているかどうかを確認する方法

statまたはbashを使用してFILENAMEがファイルを参照しているかどうかを確認する方法

このコマンドは、ディレクトリの代わりにファイルが参照されているかどうかを確認する直接的な方法をstat提供しますか、それとも提供しますか?bashFILENAME

bashand を使用すると、stat私の醜い解決策は次のようになります。

if RESPONSE="$(LC_ALL=C stat -c%F FILENAME)"\
 && [ "$RESPONSE" = 'regular file'\
 -o "$RESPONSE" = 'regular empty file' ]
then
    # do something ...
fi

また、見ることができますこれは関連の質問です。

ベストアンサー1

-f指定された名前が一般ファイルの名前であるか、一般ファイルへのシンボリックリンクの場合、テストは真です。-h与えられた名前がシンボリックリンクの名前であれば真をテストします。これはman test(またはman [)セッションとシェルセッションの両方にhelp test書き込まれますbash。両方のテスト標準テストすべてのPOSIXtest[ユーティリティはこれを実行できます。

name=something

if [ -f "$name" ] && ! [ -h "$name" ]; then
    # "$name" refers to a regular file
fi

OpenBSDでも同じことが行われます(次のコードは、呼び出し前にファイルシステムに名前があることを確認するためにstat標準テストも使用します)。-estat

name=something

if [ -e "$name" ] && [ "$(stat -f %Hp "$name")" = "10" ]; then
    # "$name" refers to a regular file
fi

(ファイル形式は10通常のファイルを意味します。)

GNUを使用している場合stat

name=something

if [ -e "$name" ] && [[ $(stat --printf=%F "$name") == "regular"*"file" ]]; then
    # "$name" refers to a regular file
fi

最後のテストのパターンは文字列sumregular fileと一致しますregular empty file

おすすめ記事