linux / shell:ファイルの変更タイムスタンプを比較的変更しますか?


20

私のカメラは次のようにファイルを作成IMG_1234.JPGし、MVI_1234.AVIそれらのファイルのタイムスタンプで。残念ながら、時刻は適切に設定されておらず、タイムスタンプはオフになっています。

ファイルのタイムスタンプをディスクに設定したいと思います。(EXIFデータではありません)。

提案されたアルゴリズム:

1 read file's modify date
2 add delta, i.e. hhmmss (preferred: change timezone)
3 write new timestamp

これを行う簡単な方法はありますか?エポック時間(秒単位)を使用して計算を単純化し、シェルスクリプトを作成することができます。


キーワードはmtimeです。で説明したように、私は、ファイルのmtimeのではなく、現在の時間に対する変化を必要とするしかし、私は、まだ解決策を見つけていないunixtutorial.org/2008/11/...
インデックス

回答:


38

touch これを行うことができます:

 $ ls -l something
-rw-rw-r-- 1 tgs tgs 0 2010-03-22 16:03 something
 $ touch -r something -d '-1 day' something 
 $ ls -l something 
-rw-rw-r-- 1 tgs tgs 0 2010-03-21 16:03 something

http://linux.about.com/library/cmd/blcmdl_touch.htm

mtimeを変更するには、追加 --time=mtime


はい、これは、現在のシステム時刻を基準としていないファイルの...おかげで、しかし...
インデックス

1
私が最初に答えたとき、はい、しかし答えを編集しました。この-r fileオプションを使用すると、そのファイルに対して相対的になります。そのため、操作している同じファイルに相対的な時間がある場合、必要なものを取得できます。
-rescdsk

素晴らしい、ありがとう。まさに私が探していたもの。
アルテムルサコフスキー

@rescdsk、ちょうど好奇心から、この変更はファイルのフォレンジック分析にどのように影響しますか?ファイルを変更したが、その変更日を以前の値に戻した場合、これはiノードまたは他のファイルシステムメタデータで検出可能でしょうか?ジャーナリングはこの分析に影響しますか?
フランクトーマス

@FrankThomas、申し訳ありませんが、私は見当もつかない!
rescdsk

11

上記を組み合わせて、AM / PMが間違っていた場合...

ファイルのタイムスタンプを修正します。

#!/bin/sh
for i in all/*; do
  touch -r "$i" -d '-12 hour' "$i"
done

次に、jpgファイルのEXIF情報を修正されたタイムスタンプに更新します。

$ jhead -dsft *.jpg

カメラの時間設定を修正することを忘れないでください。


2

サブディレクトリ内のすべてのファイルを反復処理します:statを使用してファイルのエポック/ UNIX時間を秒単位で取得し、mtimeの新しい日付として合計を解析してファイルに書き込みます

#!/bin/sh
for i in all/*; do
  touch -m -d "$(stat -c %y "$i") + 3600 sec" "$i"
done

pythonianアプローチについては、https: //stackoverflow.com/questions/1158076/implement-touch-using-pythonを参照してください


明確にするために、これはcorutilの日付パーサーが相対的な意味時間を受け入れるだけでなく、実際に計算できることを意味します!ドキュメンテーション(gnu.org/software/coreutils/manual / ...)でその情報を見つけられなかったので、それを指摘するだけです[実際にあります。相対的なアイテムの効果は蓄積されます。 "]
インデックス

2

OS Xでも同じことをしていますが、タッチの構文はここで少し異なります。

使っています:

touch -r "filename" -A '013007' "filename"

これにより、元の変更時間に対して+1時間30分7秒が調整されます。'-013007'時間を戻すために。


サイドノート:何もないよりはましですが、この構文はスクリプト作成にとって悪夢です。
-tuomassalo

それがまさに私が探していたものです(RTFMには遅すぎます:D)。ありがとう!
ミケーレダッラーガタ

1

Linux、タッチを使用して最終変更タイムスタンプを変更する:

現在のタイムスタンプでファイルを作成します。

el@apollo:~$ touch myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Aug 22 09:25 myfile.txt

タイムスタンプを2時間前に変更します。

el@apollo:~$ touch -d "2 hours ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Aug 22 07:25 myfile.txt

タイムスタンプを200時間前に変更します。

el@apollo:~$ touch -d "200 hours ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Aug 14 01:25 myfile.txt

タイムスタンプを30日前に変更します。

el@apollo:~$ touch -d "30 days ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Jul 23 09:25 myfile.txt
el@apollo:~$

シェナンガンの場合、将来の最終変更日を設定します。

el@apollo:~$ touch -d "-400000 days ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Oct 21  3012 myfile.txt

どうやら、今夜は3012のようにパーティーをする予定です。


最後の「未来」の例では、マイナス(-)が過去に 400,000日進むようにタッチに指示してませんが、それでも将来は終了しますか?それとも、マイナス+日付=未来をダブルネガティブにするように言っていますか?Yar
matey

0

jheadを使用します。

http://www.sentex.net/~mwandel/jhead/usage.html

Exifヘッダーに格納されている時間をh:mm前後に調整します。タイムゾーンを越えて移動した後や、夏時間が変更された場合など、カメラに間違った時間を設定して写真を撮影した場合に便利です。


ヒントをありがとう、これはexifとexifToolに似ており、digiKamの「日付と時刻の調整」機能と似ていますが、ファイルのシステム日付を変更したいと思います。もう一つの問題は、私のスマートOSがその場で現地時間に時間を変換するようだと、DSTが1時間帯に蹴らた:-)ということです
インデックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.