web-dev-qa-db-ja.com

Busyboxツールのみで、名前付きの月の日付をUNIXタイムスタンプに変換するにはどうすればよいですか?

私は、busyboxツールにほとんどアクセスできるだけの環境で作業していて、シェルスクリプトでMon Jan 1 23:59:59 2018 GMT形式の日付をUNIXタイムスタンプに変換しようとしています。解析している入力時間の形式を変更できません。 busybox dateは、この日付形式、または名前付きの月を含む他の形式を理解できないようです。私はそれを実行できる本当に醜いスクリプトを持っていますが、誰かがもっと良いことを知っていますか?

編集:date -Dオプションが機能しません。

date: invalid option -- 'D'     
BusyBox v1.24.1 (2018-01-11 16:07:45 PST) multi-call binary.     

Usage: date [OPTIONS] [+FMT] [TIME]`
7
Nic

ビジーボックスdate2 いくつかの助けを借りて、指定された文字列の日付を完全に解析できます1 (GMTタイムゾーンを除く)。

$ gdate='Mon Jan 1 23:59:59 2018 GMT'
$ TZ=GMT0 busybox date -d "$gdate" -D '%a %b %d %T %Y %Z'
Mon Jan  1 23:59:59 GMT 2018

ヘルプは-Dオプションで提供されます。これはソース形式の説明です。

UNIXタイムスタンプを取得するには、予想される出力形式+'%s'を追加するだけです。

$  TZ=GMT0 busybox date -d "$gdate" -D '%a %b %d %T %Y %Z' +'%s'
1514851199

1
busybox dateには、GNU dateコマンドの機能のほとんどと、GNU dateコマンドは:-Dオプションではありません。busyboxのヘルプは次のように取得します。

$ busybox date --help

BusyBox v1.27.2(Debian 1:1.27.2-2)マルチコールバイナリ。

使用法:日付[オプション] [+ FMT] [時間]

時間の表示(+ FMTを使用)、または時間の設定

    [-s,--set] TIME Set time to TIME
    -u,--utc        Work in UTC (don't convert to local time)
    -R,--rfc-2822   Output RFC-2822 compliant date string
    -I[SPEC]        Output ISO-8601 compliant date string
                    SPEC='date' (default) for date only,
                    'hours', 'minutes', or 'seconds' for date and
                    time to the indicated precision
    -r,--reference FILE     Display last modification time of FILE
    -d,--date TIME  Display TIME, not 'now'
    -D FMT          Use FMT for -d TIME conversion

-D FMTオプションに注意してください。


2
2つの方法でbusybox dateを呼び出すことができる場合があることに注意してください。

$ busybox date

または、busyboxという名前のdateへのリンクが正しいPATHディレクトリにインストールされている場合:

$ date

確認するには、--versionまたは--helpを要求して、インストールした日付を確認します。

GNU date

$ date --version
date (GNU coreutils) 8.28

または(busybox date):

$ date --help
BusyBox v1.27.2 (Debian 1:1.27.2-2) multi-call binary.
…
…
7
Isaac