การเปลี่ยนวันที่สร้างของไฟล์


62

คุณช่วยบอกฉันทีว่าฉันสามารถเปลี่ยนวันที่สร้างไฟล์ใน Lion ได้อย่างไร ฉันรู้ว่ามีคำสั่ง touch-t แต่มันไม่ทำงานใน Lion มีคนสองคนพูดถึงวิธีอื่น แต่ฉันคิดว่าพวกเขาได้เขียนวิธีการแก้ปัญหาในภาษา "coder" มากกว่าภาษาคนทั่วไป - คนที่จะสามารถตอบได้ในวิธีที่คนธรรมดาสามารถดำเนินการได้หรือไม่

ขอบคุณมากสำหรับความช่วยเหลือของคุณ.


คำอธิบาย "coder" ที่คนอื่นเขียนเกี่ยวกับอาจเป็นข้อมูลอ้างอิงถึง "สัมผัส" คุณต้องเปิดเทอร์มินัลนำทางไปยังโฟลเดอร์ที่ไฟล์นั้นใช้คำสั่ง touch เพื่อแก้ไขวันที่สร้างของ fie
Derek Knight

2
FWIW คุณอยู่ในบรรทัดที่ถูกต้องด้วย "touch-t" แต่มีช่องว่างระหว่าง h และ the - เป็น "touch -t"
Derek Knight

คำตอบ:


95

touch -tโดยปกติจะเปลี่ยนเวลาการแก้ไขและการเข้าถึงเท่านั้น มันจะเปลี่ยนเวลาการสร้างถ้าเวลาเป้าหมายอยู่ก่อนเวลาการสร้างเดิม

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 เปลี่ยนเวลาการสร้างเสมอ

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

SetFile เป็นส่วนหนึ่งของแพ็คเกจเครื่องมือบรรทัดคำสั่งซึ่งสามารถดาวน์โหลดได้จากdeveloper.apple.com/downloadsหรือจากการตั้งค่าของ Xcode


4
-m สำหรับการเปลี่ยนเวลาแก้ไข
AlikElzin-kilaka

5
ในโยเซมิตีต้องให้ฉันใช้รูปแบบ+%Y%m%d%H%M.%S(สังเกตเห็นจุดระหว่างนาทีและวินาที)
Calimo

ฉันเขียนฟังก์ชันที่เรียกว่าCpCreationDateในfish:SetFile -d (GetFileInfo -m $argv[1]) $argv[2]
Pascal

15

ใน Mac OS X ดูเหมือนจะมีการประทับเวลาที่แตกต่างกันสี่ครั้งที่เกี่ยวข้องกับไฟล์ การประทับเวลานี้ไม่ได้มีการปรับปรุงอยู่เสมอเป็นอิสระจากกัน แต่หนึ่งสามารถมีบางการควบคุมบุคคลที่มีบิตของการดูแลและมีการใช้touch, SetFileและchown(หรือchmod) หากต้องการดูสิ่งนี้ให้ลองทดสอบและสร้างไฟล์ใหม่จากพรอมต์คำสั่ง#:

# 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

วันแรกที่แสดงเป็นเวลาในการเข้าถึงที่ผ่านมา ( atime) ที่สองคือการปรับเปลี่ยนเวลาที่ผ่านมา ( mtime), สามคือการเปลี่ยนแปลงสถานะที่ผ่านมา ( ctime) ที่สี่เป็นช่วงเวลาของการสร้างแฟ้ม (เกิดBtime) man lstatให้ดู

ในการแก้ไขเวลาในการเข้าถึง ( atime) เป็นเวลาที่กำหนดให้ใช้:

# 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

หากต้องการแก้ไขเวลาแก้ไข ( mtime) และเวลาของการสร้างไฟล์ ( Btime) เป็นเวลาที่ระบุให้ใช้:

# 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

เห็นได้ชัดว่านี่ยังอัปเดตเวลาของการเปลี่ยนสถานะล่าสุด ( ctime) เป็นเวลาของระบบปัจจุบันโดยอัตโนมัติ!

หากต้องการแก้ไขเฉพาะเวลาที่สร้าง / เกิด ( Btime) ตามเวลาที่กำหนดให้ใช้ (ตามที่คนอื่น ๆ เสนอไว้ด้านบน):

# 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

หากต้องการปรับเปลี่ยนเฉพาะเวลาที่มีการเปลี่ยนแปลงสถานะล่าสุด ( ctime) เป็นเวลาที่ระบบปัจจุบันใช้เช่น:

# 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

usernameเจ้าของไฟล์อยู่ที่ไหน(รายงานโดยstatหรือls -l) สิ่งนี้จะไม่เปลี่ยนความเป็นเจ้าของของไฟล์ แต่เข้าสู่ inode ของไฟล์และบันทึกสิ่งนี้เมื่อถึงเวลาที่การเปลี่ยนแปลงสถานะครั้งสุดท้าย น่าเสียดายที่ไม่สามารถระบุเวลาอย่างชัดเจนที่นี่นอกเหนือจากการเปลี่ยนเวลาของคอมพิวเตอร์ ...

โดยสรุปเพื่อให้สามารถเปลี่ยนสี่การประทับเวลาได้อย่างอิสระหนึ่งอาจใช้ (ตามลำดับนี้สำหรับ 3 ครั้งล่าสุด):

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [ตั้งค่าระบบวันที่] chown username <file>[เปลี่ยนกลับเป็นวันที่ระบบปกติ]

(แน่นอนว่าการรีเซ็ตวันที่ของระบบอาจไม่ใช่การดำเนินการที่ปราศจากความเสี่ยงคุณได้รับคำเตือนแล้ว)


+1 ขอบคุณสำหรับคำตอบที่ละเอียดมาก ๆ สิ่งนี้แก้ไขความทุกข์ยากทั้งหมดของฉัน
Govind Rai

13

คำสั่งบรรทัดtouchคำสั่งทำงานใน Lion แต่คุณต้องการพื้นหลังเล็กน้อยในการใช้งาน

ประการแรกคุณต้องพิมพ์ในมันไม่ใช่ยูทิลิตี้ที่ทำงานแบบกราฟิกในหน้าต่าง สถานที่ที่คุณพิมพ์ในเป็น app ที่เรียกว่าเทอร์มิ คุณสามารถพบสิ่งนี้ได้ในโฟลเดอร์ Utilities ของคุณหรือใช้ Spotlight search เพื่อค้นหา

เมื่อคุณเริ่มต้นคุณจะได้รับหน้าต่างบรรทัดคำสั่งที่คุณสามารถพิมพ์คำสั่ง เพียงเพราะคุณกำลังพิมพ์ไม่ได้หมายความว่าจะมีอะไรเกี่ยวข้องกับการเขียนโค้ด แต่สำหรับคนที่เพิ่งเริ่มใช้คำสั่ง OS "แบบเก่า" มันอาจดูน่ากลัวเล็กน้อย

ดังนั้นคำสั่งนั้นเรียกว่าtouchและหลังจากคำสั่งคุณสามารถส่งพารามิเตอร์ต่างๆได้สิ่งเดียวที่จำเป็นคือชื่อไฟล์ การพิมพ์ต่อไปนี้จะกำหนดวันที่แก้ไขล่าสุดของไฟล์เป็นเวลาปัจจุบัน:

touch filename

แน่นอนคุณอาจต้องค้นหาไฟล์ก่อนซึ่งอาจต้องการคำสั่งเพิ่มเติมเพื่อไปที่ไฟล์ดังกล่าว ซีดีหรือเปลี่ยนไดเรกทอรีคำสั่งช่วยที่นี่:

cd ~/Desktop/files/PDFs
touch filename

หรือคุณสามารถเพิ่มพา ธ แบบเต็มไปยังไฟล์โดยเป็นส่วนหนึ่งของคำสั่ง:

touch ~/Desktop/files/PDFs/filename

การใช้งานขั้นสูงเพิ่มเติมของคำสั่ง touch ช่วยให้คุณสามารถระบุเวลาที่คุณต้องการตั้งค่าแทนที่จะใช้เวลาในการดำเนินการตั้งค่าการเข้าถึงแทนการปรับเปลี่ยนเวลาเป็นต้นนี่คือพารามิเตอร์ที่ต้องการ-tและอื่น ๆ บางคนตั้งเวลาเป็นเวลาของไฟล์อื่นบางคนตั้งค่าให้ย้อนกลับหรือส่งต่อตามจำนวน X ( ดูที่นี่สำหรับรายละเอียดเพิ่มเติม) เช่น:

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

ต่อไปนี้มาจากหน้านี้ซึ่งเป็นข้อมูลอ้างอิงที่เป็นประโยชน์และเป็นตัวอย่างที่ดีพร้อมคำแนะนำสำหรับผู้ที่รู้สึกไม่สบายใจกับที่ตั้งไฟล์ในบรรทัดคำสั่ง

โปรดทราบว่าสิ่งนี้จะเปลี่ยนทั้งวันที่แก้ไขและวันที่สร้างคุณลักษณะเฉพาะเมื่อไฟล์ของคุณถูกสร้างขึ้นหลังจากวันที่คุณป้อน นี่เป็นเพราะไฟล์ไม่สามารถแก้ไขได้ก่อนที่จะถูกสร้างขึ้น หากสร้างก่อนวันที่คุณตั้งค่าเฉพาะวันที่แก้ไขเท่านั้นที่จะถูกเปลี่ยน

วิธีการเปลี่ยนวันที่สร้างคุณลักษณะของไฟล์?

  1. เปิดแอปพลิเคชั่น Terminal ( /Applications/Utilities/Terminal.app) หรือหากคุณต้องการใช้ iTerm

  2. พิมพ์สิ่งนี้ลงในเทอร์มินัล (โดยไม่ต้องกดปุ่ม Enter / return) การแทรกวันที่ในรูปแบบของYYYYMMDDhhmm:

    touch -t 201212211111
    
  3. เปิดหน้าต่าง Finder และค้นหาไฟล์ที่คุณต้องการแก้ไขและลากและวางลงในหน้าต่างเทอร์มินัลจากนั้นจะแทรกตำแหน่งไฟล์โดยใช้คำสั่งบรรทัดคำสั่ง นี่คือตัวอย่างของสิ่งที่ควรพิมพ์ลงในเทอร์มินัล ณ จุดนี้:

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

    201212211111 ในตัวอย่างด้านบนแทน“ 21 ธันวาคม 2012 11:11 น


2
แต่touchปรับเปลี่ยนวันที่แก้ไขไม่ใช่วันที่สร้างไฟล์
แดเนียล

1
มันสามารถทำได้ทั้งสองอย่าง ขึ้นอยู่กับพารามิเตอร์
stuffe

2
การใช้touchกับพารามิเตอร์ที่คุณให้ไว้ข้างต้นเปลี่ยนการแก้ไข แต่ไม่ใช่วันที่สร้างสำหรับไฟล์ทดสอบของฉัน
Daniel

2
@Daniel คุณอาจได้รับคำตอบอย่างชัดเจน แต่เพราะความครบถ้วนแล้วtouch จะแก้ไขวันที่สร้างโดยขึ้นอยู่กับข้อโต้แย้ง หากคุณระบุวันที่แก้ไขก่อนวันที่สร้างไฟล์วันที่สร้างจะเปลี่ยนเป็นค่าวันที่แก้ไขใหม่โดยอัตโนมัติเนื่องจากไฟล์ไม่สามารถแก้ไขได้ก่อนที่จะสร้าง
Govind Rai

2
ฉันเพิ่งลองสิ่งนี้บนเซียร่าและการสัมผัสอย่างแน่นอนไม่เปลี่ยนcreationวันที่ ฉันสามารถเปลี่ยนaccessและmodifiedวันที่เป็น "วันที่ในอดีต" แต่ไม่ได้แก้ไขวันที่สร้าง ตรวจสอบหน้า man สำหรับการสัมผัสมันไม่ได้พูดถึงวันที่สร้าง ระบบไฟล์: Mac OS Extended (Journaled, Encrypted) ใช้SetFile -d "$(GetFileInfo -m test.txt)" file.txtงานได้อย่างสมบูรณ์แบบ
Jonathan Cross

7

คำแนะนำยิ่งใหญ่ที่นี่โดยเฉพาะอย่างยิ่งคนสุดท้าย (จาก Lauri Ranta ตอบ 21 สิงหาคมเวลา 15:21) Perfekt!

ตอนนี้ฉันใช้ Automator Workflow เพื่อเปลี่ยนแบทช์หลายไฟล์:

  1. รับรายการ Finder ที่เลือก
  2. เรียกใช้ Shell Script "Pass input: as arguments"

เชลล์สคริปต์คือ:

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

งานนี้มีเสน่ห์เหมือนกัน


0

วิธีที่ง่ายที่สุดที่ฉันพบคือการสร้างโฟลเดอร์ใหม่คัดลอกโฟลเดอร์ย่อยทั้งหมดของโฟลเดอร์ greyed out ไปยังโฟลเดอร์ใหม่และ voila โฟลเดอร์ใหม่ไม่ได้เป็นสีเทา คุณสามารถทำได้ในตัวค้นหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.