stat:ファイルの変更タイムスタンプ


11

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

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

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

回答:


12

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に関係なくこれらを実行するポータブルな方法が必要な場合は、いくつかの方法で実行できます。変数を適切なパラメータに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

7

「これ」が何を意味するかによります。あなたは、ファイルの取得するポータブルな方法があるかどうかを求めている場合mtimeではstat(1)、その後、何の、存在しません。BSD stat(1)はLinuxとは異なりstat(1)ます。

ファイルのを取得するためのポータブルな方法があるかどうかを尋ねている場合は、mtimeはい、次のようにして行うことができますperl(1)

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

5

のOSXバージョンとUbuntuバージョンにstatは、OSXのstatデフォルトが簡潔な出力であり、Linuxのstatデフォルトが冗長であるいくつかのフープをジャンプする必要があるという点でいくつかの違いがあるためです。OSXで単にエイリアスを使用する1つの可能性は、statが両方で同じように実行されるようにすることです。

エイリアスを設定statしてOSXでの冗長出力を強制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-

出典:

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

OSXでのstatの出力


OSXに-xオプションがないと思います。
fushupinnanren 2017年

@Derry正解です。残念ながら、OSXを持っていないので、OSXビットの調査に頼らなければなりません。正解。
オタク長老2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.