_touch -m
_を使用して他のファイルに設定できるように、ファイルの変更日を取得する必要があります。
stat
またはPerl -le 'print((stat shift)[9])'
必要なものが返されませんでした。 -と+を使うことになっていると思いますが、正しく使う方法がわかりません。
_-t
_を使用して別の方法で設定することもできますが、ここでは2013年7月3日に設定しようとしました。
_touch -t 20130703
_
しかし、それでも私が望むようには変わりませんでした。では、質問に戻って、_touch -m
_で設定できるように、別のファイル属性をコピーするにはどうすればよいですか?
stat
またはPerl
によって返される時間は、コマンドdate
を使用して必要な形式に変換できます( GNU coreutilsがインストールされています):
# Convert UNIX time returned by Perl to year+month+day
$ date -d @$(Perl -le 'print((stat shift)[9])' FILENAME) +%Y%m%d
20130703
# Convert formatted time returned by GNU stat to year+month+day
$ date -d "$(stat -c %y FILENAME)" +%Y%m%d
20130703
date
自体も、ファイルの変更時間を直接与えることができます。
$ date -r FILENAME +%Y%m%d
20130703
詳細については、 GNU date (man date
)。
stat -f %m -t %Y%m%d%H%M.%S myfile
これにより、タイムスタンプがtouch -t
に必要な形式で出力されます。
タイムスタンプはローカルタイムゾーンで表されることに注意してください。これは、タイムゾーン間でファイルを移植したり、DSTを使用したタイムゾーンで夏から冬への切り替えが繰り返される時間帯のタイムスタンプでは扱いにくい場合があります。タイムゾーンの問題を回避するには、UTCタイムスタンプを使用します。
timestamp=$(TZ=UTC stat -f %m -t %Y%m%d%H%M.%S myfile)
…
TZ=UTC touch -t "$timestamp" myotherfile
これは、OSXに同梱されているようなBSD stat
ユーティリティに適用され、LinuxにあるようなGNUまたはBusyBoxstat
ユーティリティには適用されないことに注意してください。
「ls-otr--time-style = +%Y%m%d%H%M。%S」を実行すると、日付が適切な形式で取得されますが、他の多くの情報は簡単に編集できます。
これは、エイリアスに割り当てられ、出力がファイルにリダイレクトされる場合に便利です。