私はそれをstat -f %m .bashrc
osxで.bashrcの修正時間を取得するために使用します。しかし、Ubuntuで同じコマンドを実行するとエラーが発生します。
stat: cannot read file system information for %m': No such file or directory
これを達成するための互換性のある方法はありますか?
答え1
UbuntuはGNU coreutilsを使用し、stat
OSXは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
「これ」が何を意味するかによって異なります。ファイルをインポートする移植可能な方法があるかどうかを尋ねる場合はいいえmtime
、stat(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が両方で同じことを行うようにすることです。
stat
OSXで詳細な出力を強制するためにエイリアスを設定するのが気に入らない場合は、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-
源泉: