Làm cách nào để chỉnh sửa tập tin mà không thay đổi ngày sửa đổi?


Câu trả lời:


2

Cách duy nhất tôi có thể nghĩ đến là lưu trữ ngày sửa đổi trước khi thay đổi và sau đó đặt lại.

Tôi không biết về bất kỳ công cụ CLI nào sẽ cho phép bạn làm điều đó, tuy nhiên nhiều năm trước tôi đã viết một cái gì đó bằng C mà tôi đã sử dụng để đặt ngày sửa đổi trên một tệp thành giá trị tùy ý. Tôi biết đây không phải là câu trả lời mà bạn đang tìm kiếm, nhưng tôi sẽ làm theo cách sau:

  1. lấy thời gian truy cập ban đầu và thời gian sửa đổi cho một tập tin, trước khi bạn thay đổi nó. Đối với điều này, bạn chỉ có thể sử dụng stat()cuộc gọi hệ thống (đọc thêm về nó bằng cách phát hành man 2 stat).
  2. thay đổi tập tin, sử dụng vihoặc bất kỳ trình soạn thảo nào bạn muốn
  3. đặt thời gian sửa đổi trở lại như cũ. Điều này có thể được thực hiện bằng cách sử dụng utimes()cuộc gọi (một lần nữa, bạn có thể đọc thêm bằng cách phát man 2 utimeslệnh). Xin lưu ý, utimes()đặt cả thời gian truy cập và thời gian sửa đổi.

Chỉnh sửa

Trên thực tế có vẻ như đã có một công cụ CLI có thể làm điều đó. Theo câu trả lời này: Làm cách nào để thay đổi ngày / giờ tạo (st_birthtime) của tệp trong Lion? , bạn có thể sử dụng touchlệnh để thay đổi những thời điểm đó: touch -mthay đổi thời gian sửa đổi và touch -athay đổi thời gian truy cập (bạn có thể sử dụng cả hai tùy chọn trong một cuộc gọi). Tất cả những gì bạn cần làm là sử dụng statdòng lệnh trên tệp trước khi bạn sửa đổi nó và hiển thị thời gian truy cập và sửa đổi của nó. Sau đó thực hiện chỉnh sửa và sau đó, sử dụng touchđể đặt thời gian truy cập / sửa đổi trở lại giá trị của chúng từ trước khi chỉnh sửa.


Tất cả điều này là phức tạp. Nhưng tôi có thể kết thúc bằng cách sử dụng một số các lệnh này. Cảm ơn bạn Mike.
Nicolas Barbulesco

1

Bạn có thể sử dụng cảm ứng -t để thay đổi thời gian sửa đổi và truy cập, chạm -m để thay đổi thời gian sửa đổi hoặc chạm -a để thay đổi thời gian truy cập. Tất cả đều thay đổi thời gian tạo nếu thời gian đích trước thời gian tạo ban đầu.

$ ls -lT test.txt
-rw-r--r--  1 lauri  staff  3 Nov  3 15:13:42 2013 test.txt
$ date -jf %s $(stat -f%m test.txt) +%Y%m%d%H%M.%S
201311031513.42
$ vi test.txt
$ ls -lT test.txt
-rw-r--r--  1 lauri  staff  3 Nov  3 15:18:18 2013 test.txt
$ touch -t 201311031513.42 test.txt
$ ls -lT test.txt
-rw-r--r--  1 lauri  staff  3 Nov  3 15:13:42 2013 test.txt

stat -f% m chỉ định chuỗi định dạng là thời gian sửa đổi. Trong ngày -jf, -j vô hiệu hóa cài đặt thời gian và -f chỉ định định dạng.

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.