linux / shell: thay đổi dấu thời gian của tệp tương đối?


20

Máy ảnh của tôi tạo ra các tệp như IMG_1234.JPGMVI_1234.AVIcó dấu thời gian trên các tệp đó. Thật không may, thời gian không được đặt đúng và dấu thời gian đã tắt.

Tôi muốn đặt dấu thời gian của tệp trên đĩa. (không phải dữ liệu EXIF).

Thuật toán đề xuất:

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

Có cách nào làm dễ hơn không? có lẽ người ta có thể đơn giản hóa việc tính toán bằng cách sử dụng thời gian kỷ nguyên (giây kể từ) và lấy ra một tập lệnh shell.


Từ khóa là mtime. Tuy nhiên, tôi chưa tìm thấy giải pháp nào, vì tôi cần một thay đổi liên quan đến thời gian của tập tin, không phải thời gian hiện tại như được mô tả trong unixtutorial.org/2008/11/ Kẻ
chỉ số

Câu trả lời:


38

touch có thể làm điều này:

 $ 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/l Library / cmd / blcmdl_touch.htmlm

Để thay đổi thời gian, thêm --time=mtime


có, nhưng điều này liên quan đến thời gian hệ thống hiện tại của bạn, không phải là tệp .. cảm ơn, mặc dù ..
chỉ mục

1
Khi tôi trả lời lần đầu, có, nhưng tôi đã chỉnh sửa câu trả lời. Khi bạn sử dụng -r filetùy chọn, nó sẽ trở nên liên quan đến tập tin đó. Vì vậy, nếu bạn có thời gian liên quan đến cùng một tệp bạn đang thao tác, bạn sẽ có được những gì bạn muốn.
rescdsk

Rực rỡ, cảm ơn bạn. Chính xác những gì tôi đang tìm kiếm.
Artem Russakovskii

@rescdsk, chỉ cần ra khỏi sự tò mò, sự thay đổi này sẽ ảnh hưởng đến phân tích pháp y của tập tin như thế nào? nếu bạn đã sửa đổi một tệp, nhưng sau đó đặt ngày sửa đổi của nó trở lại giá trị trước đó, liệu điều này có thể được phát hiện trên inode hoặc siêu dữ liệu hệ thống tệp khác không? sẽ báo cáo tác động phân tích này?
Frank Thomas

@FrankThomas, xin lỗi, tôi không có manh mối!
rescdsk

11

Kết hợp những điều trên, nếu AM / PM sai ...

Sửa tem thời gian của tập tin:

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

Sau đó cập nhật thông tin EXIF ​​trong các tệp jpg vào dấu thời gian đã sửa:

$ jhead -dsft *.jpg

Đừng quên sửa cài đặt thời gian trong máy ảnh của bạn.


2

Lặp lại tất cả các tệp trong thư mục con tất cả: sử dụng stat để lấy các tệp epoch / unix thời gian tính bằng giây, hãy chạm vào phân tích tổng dưới dạng ngày mới cho mtime và ghi vào tệp

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

để biết cách tiếp cận theo kiểu pythonia, hãy xem /programming/1158076/im vây-touch -USE-python


chỉ cần làm rõ, điều này có nghĩa là trình phân tích ngày của corutil không chỉ chấp nhận thời gian tương đối, ngữ nghĩa mà thực sự có thể tính toán! Chỉ cần chỉ ra rằng tôi không tìm thấy thông tin đó trong tài liệu ( gnu.org/software/coreutils/manual/ mẹo ) [Nó thực sự ở đó: "Các mục tương đối điều chỉnh một ngày (hoặc ngày hiện tại nếu không) tiến hoặc lùi. Ảnh hưởng của các vật phẩm tương đối tích lũy. "]
chỉ số

2

Tôi đang làm điều tương tự trong OS X, và cú pháp cảm ứng thay đổi ở đây một chút.

Tôi đang dùng:

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

Điều này sẽ điều chỉnh + 1 giờ 30 phút 7 giây so với thời gian sửa đổi ban đầu. '-013007'để quay ngược thời gian


Một lưu ý phụ: mặc dù tốt hơn là không có gì, cú pháp này là một cơn ác mộng đối với kịch bản.
tuomassalo

Đó chính xác là những gì tôi đang tìm kiếm (quá lười biếng với RTFM: D). Cảm ơn!
Michele Dall'Agata

1

Linux, sử dụng cảm ứng để thay đổi dấu thời gian được sửa đổi lần cuối:

Tạo một tệp có dấu thời gian ngay bây giờ:

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

Thay đổi dấu thời gian thành 2 giờ trước:

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

Thay đổi dấu thời gian thành 200 giờ trước:

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

Thay đổi dấu thời gian là 30 ngày trước:

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:~$

Đối với shenanigans, đặt ngày sửa đổi cuối cùng trong tương lai:

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

Rõ ràng, chúng ta sẽ tiệc tùng như 3012 tối nay.


Đối với ví dụ "tương lai" cuối cùng, không phải là dấu trừ ( -) cho biết chạm vào 400.000 ngày trong quá khứ , và nó sẽ kết thúc trong tương lai? Hoặc chờ đợi, bạn đang nói chạm để nhân đôi ngày, trừ + trước = tương lai ...? Yar
matey

0

Sử dụng đầu đạn:

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

Điều chỉnh thời gian được lưu trữ trong tiêu đề Exif theo h: mm lùi hoặc tiến. Hữu ích khi chụp ảnh với thời gian sai được đặt trên máy ảnh, chẳng hạn như sau khi di chuyển qua các múi giờ hoặc khi thời gian tiết kiệm ánh sáng ban ngày đã thay đổi.


Cảm ơn về mẹo này, điều này tương tự như exif và exifTool và giống như tính năng "Điều chỉnh ngày và giờ" của digiKam - nhưng tôi muốn sửa đổi ngày hệ thống của tệp. Một vấn đề khác là hệ điều hành thông minh của tôi dường như chuyển đổi thời gian sang giờ địa phương một cách nhanh chóng và DST đã khởi động trong một múi giờ :-)
chỉ số
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.