stat: ファイルの修正タイムスタンプ

stat: ファイルの修正タイムスタンプ

私はそれをstat -f %m .bashrcosxで.bashrcの修正時間を取得するために使用します。しかし、Ubuntuで同じコマンドを実行するとエラーが発生します。

stat: cannot read file system information for %m': No such file or directory

これを達成するための互換性のある方法はありますか?

答え1

UbuntuはGNU coreutilsを使用し、statOSXはBSDバリアントを使用します。したがって、Ubuntuではコマンドが少し異なります。

stat -c %Y .bashrc

からman stat

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new‐
          line after each use of FORMAT

そして:

   %Y     time of last data modification, seconds since Epoch

オペレーティングシステムに関係なく移植可能な方法が必要な場合は、いくつかの方法があります。私は変数を一度に1つずつ適切なパラメータに設定する必要があると思いました。

if uname | grep -q "Darwin"; then
    mod_time_fmt="-f %m"
else
    mod_time_fmt="-c %Y"
fi

次に、statコマンドで必要なときはいつでもその値を使用します。

stat $mod_time_fmt .bashrc

答え2

「これ」が何を意味するかによって異なります。ファイルをインポートする移植可能な方法があるかどうかを尋ねる場合はいいえmtimestat(1)ありません。 BSDはstat(1)Linuxとは異なりますstat(1)

ファイルをインポートするための移植可能な方法があるかどうかを尋ねる場合は、はい、mtime次のように実行できますperl(1)

perl -e 'print +(stat $ARGV[0])[9], "\n"' file

答え3

OSXとUbuntuのバージョンにはstatわずかな違いがあるため、OSXはstatデフォルトで簡潔な出力を使用し、Linuxはデフォルトstatで詳細な出力を使用するため、スキップする必要があるいくつかの問題があります。 1つの可能性は、単にOSXでエイリアスを使用して、statが両方で同じことを行うようにすることです。

statOSXで詳細な出力を強制するためにエイリアスを設定するのが気に入らない場合は、alias stat="stat -x"Perlは必要ありません。

stat .bashrc| grep Modify これがUbuntuで必要なものです。上記のようにエイリアスを設定すると、次のような状況で動作します。オペレーティングシステムも同様

Ubuntu 14.04.5の例 Ubuntu 16.04でもほぼ同じ結果が得られます。

   stat .bashrc| grep Modify
Modify: 2014-03-30 23:14:47.658210121 -0500

必要なものがタイムスタンプだけであれば、Modify:残りは削除して維持できます。

stat .bashrc| grep Modify | cut -c 9-

源泉:

https://ss64.com/osx/stat.html

OSXの統計出力

関連情報