与えられたファイルの年齢を取得する

与えられたファイルの年齢を取得する

与えられたファイルの寿命を取得する方法(最小日数)は何ですか?

ls -lh同様のコマンドに精通しています。私が望むものは次のように動作します。

getfage <FILE> # prints out '12d' (12 days)

また、Mac OS Xでも使用したいので、ある程度クロスプラットフォームが必要ですが、主なユースケースはLinuxボックスにあります。

ノート

Linuxは生成時間を追跡しないので、2つの解決策を探しています。一つは時間(Linux) - つまりファイルが最後に変更された時刻--Mac OS X用にも対応できます。時間または作成時間。

ベストアンサー1

OSXはファイルの生成を追跡しますが、他のほとんどのUnixはそうではないので、ファイルが作成されてからどれくらいの時間が経過したのかわかりません。ほとんどすべてのオペレーティングシステムで最後の修正以降の経過時間を取得できます。

ls出力を解析することはほとんど不可能であることを除いて、ファイル変更時間を取得するポータブルシェルユーティリティはありません。 Linuxでは、次のコマンドはファイルの寿命を印刷します。

echo $(($(date +%s) - $(date +%s -r "$filename"))) seconds
echo $((($(date +%s) - $(date +%s -r "$filename")) / 86400)) days

Linuxstat -c %Y -- "$filename"ではdate +%s -r "$filename"

OSXdatestatコマンドは異なります。次のコマンドを使用できます。

echo $(($(date +%s) - $(stat -t %s -f %m -- "$filename"))) seconds
echo $((($(date +%s) - $(stat -t %s -f %m -- "$filename")) / 86400)) days

非組み込みLinuxシステムとOSXには、デフォルトでPerlがインストールされています。

perl -l -e 'print -M $ARGV[0], " days"' "$filename"
perl -l -e 'print 86400 * -M $ARGV[0], " seconds"' "$filename"
perl -l -e '$mtime = (stat($ARGV[0]))[9]; print time - $mtime, " seconds"' -- "$filename"

おすすめ記事