BSDでタッチコマンドの時間形式を変更する

BSDでタッチコマンドの時間形式を変更する

Cシェルでtouchコマンドを使用して時間を変更するときに時間形式を変更する方法を知りたいです。

例えば

touch -a -t 051512002015 file.txt

これにより、接続時間が2015年5月15日12時に変更されます。

やりたいことは(今1年生)

touch -a -t 201505151200 file.txt

これがLinuxでタッチが機能する方法です。私はWindowsでUnxUtilsを使用していますが、これはcシェルタッチを使用するとほぼ確実です。順序が一貫していることを願っています。 c-shell touchコマンドを変更できますか?

答え1

これはシェルとは何の関係もなく、touch外部プログラムです。

歴史的に、日付パラメータには2つの構文がありましたtouch

touch -t CCYYMMDDhhmm.SS    # CC or CCYY may be omitted; .SS may be omitted
touch MMDDhhmmYY            # YY may be omitted

このコマンドはUnix バージョン 7日付パラメーターはありません。 BSDバージョンでは、-tそのオプションはどこかにあります(すべての日付コンポーネントが降順でソートされています)。4.4BSD。システムV(例:Sun OS 4.1.3) 直接日付形式で、年で終わります。いつシングルUnix v2(POSIX:1992ベース), System V 形式は廃止と見なされ、シングル Unix v3 (POSIX:2001)

スクリプトに標準(BSD)構文を使用することをお勧めします。 BSD構文を必要とするレガシーシステムでは、互換性のあるtouch構文を配列するいくつかの可能なアプローチがあります。

  • スクリプトが以前のシステムで実行されていることを検出したら、パラメータを混在させるラッパー関数を作成します。
  • PATH前のディレクトリの前に基準を満たすディレクトリを配置するように配置します。
  • (サポートする必要がある正確なレガシーバリアントとバージョンを公開すると、より具体的な推奨事項が得られます。)

答え2

私が知る限り、touchコマンドはシェルの一部ではありません。少なくとも私のtcshとbashのマニュアルページによると、タッチへの言及はありません。代わりに、タッチ自体がコマンドです。 touch コマンドは Linux と *BSD で多少異なるため避けられませんが、必要に応じてラッパーを作成できます。しかし、一見すると、-tパラメータは私のUbuntu LinuxシステムとFreeBSDシステムで同じように見えます。 Ubuntu Linux 8.04のタッチマニュアルページ形式は次のとおりです。

touch [-t [[CC]YY]MMDDhhmm[.ss]]

FreeBSDのマニュアルページから:

touch [-t [[CC]YY]MMDDhhmm[.SS]]

奇妙なタッチタイムフォーマットがどこから来たのかはわかりませんが、以下を見てください。 FreeBSDのマニュアルページにもこの文字の意味について詳しく説明していますが、これはFreeBSDで使用される以前の日付コマンドで使用されている形式と同じです。

date [-jnu] [[[[[CC]YY]MM]DD]hh]mm[.ss]

実際には2つのタッチコマンドと同じ形式です。奇妙なことに、Linuxでは不明な理由で、dateコマンドには異なる、あいまいな形式を使用します。

date [MMDDhhmm[[CC]YY][.ss]]

Linuxがなぜ日付の年を分と秒の間に入れるのかわかりません。明確でない場合、すべてのコマンドに含まれる文字の意味は次のとおりです。

  • CC - 世紀(00-99)
  • YY - 世紀の年(00-99)
  • MM - 月(01-12)
  • DD - その月の日付(01-31)
  • hh - 時間(00-23)
  • mm-分(00-59)
  • ss - 秒(00-61)(はい、59ではなく61)

関連情報