FreeBSD日付ユーティリティ-rスイッチが私を混乱させます。

FreeBSD日付ユーティリティ-rスイッチが私を混乱させます。

LinuxでFreeBSDに変換する必要があるbashスクリプトがありますが、マニュアルページを正しい方法で読み取るには愚かすぎるようです。

スクリプトには1行あります。

date +%d -r "$file"

Linuxではうまく機能しますが、単に提供しています

date: illegal time format

FreeBSDから。

これLinuxのマニュアルページ-r指定された参照ファイルを示します。

   -r, --reference=FILE
          display the last modification time of FILE

ここで私を混乱させるのはFreeBSD マニュアルページこのスイッチの同じ使用法を含むが、代替スイッチも提供する。

 -r seconds
     Print the date and time represented by seconds, where seconds is
     the number of seconds since the Epoch (00:00:00 UTC, January 1,
     1970; see time(3)), and can be specified in decimal, octal, or
     hex.

 -r filename
     Print the date and time of the last modification of filename.

明らかに、上記のエラーメッセージは、指定されたファイル名の-r代わりにスイッチパラメータでUNIXタイムスタンプを期待したために発生しました。

私が理解していないのは、スイッチの2番目の解釈を使用したいことをどのように明確に示すべきかです-r。通貨コンテキストから推論する必要がある場合は、このコンテキストをどのように提供するのか混乱します。

誰が私に日付ユーティリティをどのように知らせるべきか、-rここでスイッチを使用したいユースケースは何であるかを説明できますか?

答え1

-rこの使用法はソースにのみ表示されるようです。2015年5月7日。たぶんあなたのバージョンではまだこれをやっていませんか?

Revision 282608 - (view) (download) (annotate) - [select for diffs] 
Modified Thu May 7 20:54:38 2015 UTC (12 months, 1 week ago) by delphij 

date(1): Make -r behave like GNU's version when the option can not be
interpreted as a number, which checks the file's modification time and
use that as the date/time value.

答え2

スクリプトには1行あります。

日付+%d -r "$file"
Linuxではうまくいきますが..

date...コマンドはコマンドラインを解析し、getopt()オプションは厳密に引数の前になければならないため、FreeBSD / PC-BSDは失敗します。フォーマット文字列は+%dパラメータであり、-rオプションの後に続く必要があります。それ以外の場合は、-rオプションとして認識されず、(無効な)パラメータとして扱われます。マニュアルページのコマンドの概要には、dateこの順序で表示されます。

はい、dateオプション引数は数値でデコードできない場合にのみファイル名として扱われます。-rはい、ファイル名が数字の場合は問題になります。 ☺

statファイル/ディレクトリの最後の修正時間を読み取るより良い方法は、コマンドを使用することです...それ自体に大きな問題がなければ、名前が数字に似ているかどうか心配する必要はありません。

ケース「`uname`」
Linux)stat -c '%y' - "$ 1" | cut -c9-10;;
* BSD)stat -f '%Sm' -t '%d' - "$ 1";;
イサク

関連情報