Thay đổi ngày tạo của tệp


62

Bạn có thể vui lòng cho tôi biết làm thế nào tôi có thể thay đổi ngày tạo tệp trong Lion. Tôi nhận ra có lệnh touch-t nhưng nó không hoạt động trong Lion. Một vài người đã đề cập đến một cách khác, nhưng tôi nghĩ rằng họ đã viết giải pháp bằng ngôn ngữ "coder" chứ không phải ngôn ngữ giáo dân - liệu ai đó có thể trả lời nó theo cách mà một giáo dân có thể thực thi không?

Rất cảm ơn vì sự giúp đỡ của bạn.


Lời giải thích "coder" mà những người khác đã viết có lẽ là một tham chiếu đến "touch". Bạn sẽ phải mở Terminal, điều hướng đến thư mục chứa tệp sau đó sử dụng lệnh cảm ứng để sửa đổi ngày tạo của fie.
Hiệp sĩ Derek

2
FWIW Bạn đang ở đúng dòng với "touch-t", nhưng có một khoảng cách giữa h và -. Đó là "chạm -t"
Derek Knight

Câu trả lời:


95

touch -tthông thường chỉ thay đổi thời gian sửa đổi và truy cập. Nó chỉ thay đổi thời gian tạo nếu thời gian đích trước thời gian tạo ban đầu.

touch -t 199912312359 file.txt
touch -t $(date -jf %FT%T 1999-12-31T23:59:59 +%Y%m%d%H%M%S) file.txt

SetFile -d luôn thay đổi thời gian sáng tạo.

SetFile -d '12/31/1999 23:59:59' file.txt
SetFile -d "$(GetFileInfo -m test.txt)" file.txt

SetFile là một phần của gói công cụ dòng lệnh có thể được tải xuống từ developer.apple.com/doads hoặc từ tùy chọn của Xcode.


4
-m để thay đổi thời gian sửa đổi.
AlikElzin-kilaka

5
Ở Yosemite, cảm ứng yêu cầu tôi sử dụng định dạng +%Y%m%d%H%M.%S(chú ý dấu chấm giữa phút và giây)
Calimo

Tôi đã viết một hàm được gọi CpCreationDatetrong fish:SetFile -d (GetFileInfo -m $argv[1]) $argv[2]
Pascal

15

Trong Mac OS X dường như có bốn dấu thời gian khác nhau được liên kết với một tệp. Những timestamps không phải luôn luôn được cập nhật một cách độc lập với nhau, nhưng người ta có thể có một số kiểm soát cá nhân với một chút chăm sóc và với việc sử dụng touch, SetFilechown(hoặc chmod). Để thấy điều này, hãy thử nghiệm và tạo một tệp mới từ dấu nhắc lệnh #:

# touch a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

Ngày đầu tiên được liệt kê là thời gian truy cập cuối cùng ( atime), lần thứ hai là lần sửa đổi cuối cùng ( mtime), ngày thứ ba là thay đổi trạng thái cuối cùng ( ctime), lần thứ tư là thời gian tạo tệp (sinh, Btime), xem man lstat.

Để sửa đổi thời gian truy cập ( atime) thành thời gian đã chỉ định, hãy sử dụng:

# touch -a -t201412312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "May 19 00:11:14 2015" "May 19 00:11:46 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

Để sửa đổi thời gian sửa đổi ( mtime) thời gian tạo tệp ( Btime) thành thời gian đã chỉ định, hãy sử dụng:

# touch -m -t201312312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 2013" 4096 0 0 a.txt

Rõ ràng điều này cũng tự động cập nhật thời gian thay đổi trạng thái cuối cùng ( ctime) thành thời gian hệ thống hiện tại!

Để chỉ sửa đổi thời gian tạo / sinh ( Btime) thành một thời điểm nhất định, hãy sử dụng (như đề xuất của những người khác ở trên):

# SetFile -d "12/31/1999 23:59:59" a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

Để chỉ sửa đổi thời gian thay đổi trạng thái cuối cùng ( ctime) thành thời gian sử dụng hệ thống hiện tại, ví dụ:

# chown username a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:13:45 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

nơi usernamelà chủ sở hữu của tập tin (theo báo cáo của stathoặc ls -l). Điều này không thay đổi quyền sở hữu của tệp, nhưng truy cập vào nút của tệp và ghi lại đây là lần thay đổi trạng thái cuối cùng. Thật không may, không thể chỉ định rõ ràng thời gian ở đây ngoài việc thay đổi thời gian của máy tính ...

Tóm lại, để có thể thay đổi bốn dấu thời gian một cách độc lập, người ta có thể sử dụng (theo thứ tự này cho 3 lần cuối):

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [đặt ngày hệ thống] chown username <file>[hoàn nguyên về ngày hệ thống bình thường]

(Tất nhiên, việc đặt lại ngày hệ thống có thể không phải là hoạt động không có rủi ro, bạn đã được cảnh báo.)


+1 Cảm ơn bạn đã trả lời siêu chi tiết này. Điều này đã giải quyết tất cả tai ương của tôi.
Govind Rai

13

Lệnh dòng touchlệnh hoạt động trong Lion, nhưng bạn cần có một chút nền tảng về cách sử dụng nó.

Trước tiên, bạn cần nhập nó vào, nó không phải là một tiện ích hoạt động đồ họa trong một cửa sổ. Nơi bạn nhập nó là một ứng dụng có tên Terminal . Bạn có thể tìm thấy cái này trong thư mục Tiện ích của bạn, hoặc sử dụng tìm kiếm Spotlight để tìm nó.

Khi bạn khởi động nó, bạn nhận được một cửa sổ dòng lệnh nơi bạn có thể nhập lệnh. Chỉ vì bạn đang gõ không có nghĩa là nó có liên quan gì đến mã hóa, nhưng với một người mới sử dụng các lệnh hệ điều hành "lỗi thời", nó có thể trông hơi đáng sợ.

Vì vậy, lệnh được gọi là touch và sau lệnh bạn có thể truyền các tham số khác nhau, yêu cầu duy nhất là tên tệp. Nhập nội dung sau sẽ đặt ngày sửa đổi cuối cùng của tệp thành thời gian hiện tại:

touch filename

Tất nhiên, bạn có thể cần tìm tệp trước, có thể yêu cầu các lệnh tiếp theo để truy cập tệp. lệnh cd hoặc Change Directory giúp ở đây:

cd ~/Desktop/files/PDFs
touch filename

Hoặc, bạn có thể chỉ cần thêm đường dẫn đầy đủ vào tệp như một phần của lệnh:

touch ~/Desktop/files/PDFs/filename

Việc sử dụng nâng cao hơn của lệnh cảm ứng cho phép bạn chỉ định thời gian bạn muốn đặt, thay vì sử dụng thời gian lúc thực thi, đặt quyền truy cập thay vì thời gian sửa đổi, v.v ... Đây là những tham số như -t và các thông số khác làm. Một số đặt thời gian là thời gian của một tệp khác, một số đặt nó quay lại hoặc chuyển tiếp theo thời gian theo số lượng X, ( xem tại đây để biết thêm chi tiết), ví dụ:

touch -d '1 May 2005 10:22' file8

Sau đây là từ trang này cũng là tài liệu tham khảo hữu ích và một ví dụ tuyệt vời với một số lời khuyên cho những người không thoải mái với vị trí tệp trên dòng lệnh

Lưu ý rằng điều này sẽ thay đổi cả thuộc tính ngày được sửa đổi và ngày được tạo chỉ khi tệp của bạn được tạo sau ngày bạn nhập. Điều này là do một tập tin không thể được sửa đổi trước khi nó được tạo ra. Nếu được tạo trước ngày bạn đặt, chỉ ngày sửa đổi sẽ được thay đổi.

Làm thế nào để thay đổi thuộc tính ngày tạo của một tập tin?

  1. Mở ứng dụng Terminal ( /Applications/Utilities/Terminal.app) hoặc nếu bạn thích sử dụng iTerm.

  2. Nhập cái này vào Terminal (không nhấn enter / return) chèn ngày theo định dạng YYYYMMDDhhmm:

    touch -t 201212211111
    
  3. Mở cửa sổ Finder và xác định vị trí tệp bạn muốn sửa đổi và kéo và thả tệp vào cửa sổ Terminal, sau đó nó sẽ chèn vị trí tệp bằng thuật ngữ dòng lệnh. Đây là một ví dụ về những gì nên được nhập vào Terminal tại thời điểm này:

    touch -t 201212211111 /Volumes/Mac\ HD/Pictures/somefile.jpg
    

    20121221111 trong ví dụ trên đại diện cho 21 tháng 12 năm 2012 11:11 AM


2
Nhưng touchsửa đổi ngày sửa đổi, không phải ngày tạo của tệp.
Daniel

1
Nó có thể làm cả hai. Phụ thuộc vào các tham số.
nhồi vào

2
Sử dụng touchvới các tham số bạn đưa ra ở trên đã thay đổi sửa đổi nhưng không tạo ngày cho tệp thử nghiệm của tôi.
Daniel

2
@Daniel Bạn chắc chắn đã có câu trả lời của mình, nhưng để hoàn thành các sakes touch sẽ sửa đổi ngày tạo tùy thuộc vào các đối số. Nếu bạn cung cấp ngày sửa đổi trước ngày tạo tệp, ngày tạo sẽ tự động thay đổi thành giá trị ngày sửa đổi mới, vì tệp không thể được sửa đổi trước khi được tạo.
Govind Rai

2
Tôi mới thử cái này trên Sierra và cảm ứng chắc chắn không thay đổi creationngày. Tôi đã có thể thay đổi accessmodifiedngày thành "ngày trong quá khứ", nhưng nó không sửa đổi ngày tạo. Kiểm tra trang man cho cảm ứng, nó không đề cập đến ngày tạo. Hệ thống tệp: Mac OS Extended (Nhật ký, Mã hóa). Sử dụng SetFile -d "$(GetFileInfo -m test.txt)" file.txtlàm việc hoàn hảo.
Jonathan Cross

7

Gợi ý vĩ đại ở đây, đặc biệt là người cuối cùng (từ Lauri Ranta, đã trả lời ngày 21 tháng 8 lúc 15:21). Hoàn hảo!

Bây giờ tôi sử dụng Luồng công việc tự động đơn giản để thay đổi hàng loạt nhiều tệp:

  1. Nhận các mục tìm kiếm được chọn
  2. Chạy Shell Script, "Truyền đầu vào: làm đối số"

Kịch bản shell là:

for f in "$@"
do
    SetFile -d "$(GetFileInfo -m "$f")" "$f" 
done

Công việc này như một cái duyên vậy.


0

Cách dễ nhất tôi tìm thấy là tạo một thư mục mới, sao chép tất cả các thư mục con của thư mục màu xám vào thư mục mới và voila, thư mục mới không bị mờ đi. Bạn thậm chí có thể làm điều này trong công cụ tìm.

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.