私が使う stat -f %m .bashrc
osx上の.bashrcの変更時間を取得します。しかし、ubuntuで同じコマンドを実行すると、エラーが発生します。
stat: cannot read file system information for %m': No such file or directory
これを達成するための互換性のある方法はありますか?
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
OSに関係なくこれらを実行するポータブルな方法が必要な場合は、いくつかの方法で実行できます。私は変数を一度に適切なパラメータに設定すると思います:
if uname | grep -q "Darwin"; then
mod_time_fmt="-f %m"
else
mod_time_fmt="-c %Y"
fi
そして、必要に応じてstat
コマンドでこの値を使用します。
stat $mod_time_fmt .bashrc
「これ」が何を意味するかによります。 stat(1)
を使用してファイルのmtime
を取得するポータブルな方法があるかどうかを質問している場合、いいえ、ありません。 BSD stat(1)
はLinux stat(1)
とは異なります。
ファイルのmtime
を取得するためのポータブルな方法があるかどうかを尋ねている場合は、はい、Perl(1)
を使用してそれを行うことができます。
Perl -e 'print +(stat $ARGV[0])[9], "\n"' file
oSXとUbuntuのバージョンのstat
には、OSX stat
のデフォルトが簡潔な出力である点と、Linux stat
のデフォルトが冗長であるいくつかのフープをジャンプする必要があるという点で、いくつかの違いがあるためです。 OSXで単にエイリアスを使用する1つの可能性は、statが両方で同じように実行されるようにすることです。
エイリアスを設定して、OSXでstat
の詳細出力をalias stat="stat -x"
その後、Perlは必要ありません。
stat .bashrc| grep Modify
はUbuntuで必要なすべてです。上記のようにエイリアスを設定すると、 OSXでも機能します
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-
出典: