จะแสดงเวลาที่แก้ไขของไฟล์ได้อย่างไร?


35

ฉันต้องการวิธีค้นหาและพิมพ์เวลาที่แก้ไขของไฟล์เพื่อใช้ภายในสคริปต์ทุบตี

ฉันมาด้วย:

ls -l $filename | cut -d ' ' -f '6-8'

ผลลัพธ์ใด:

Jul 26 15:05

แม้ว่าฉันต้องการหลีกเลี่ยงการแยกวิเคราะห์lsแต่มันก็มีประโยชน์ที่จะมีปีอยู่ที่นั่น

โดยหลักการแล้วฉันต้องการเห็นเอาต์พุตคล้ายกับเอาต์พุตดีฟอลต์ของdateคำสั่ง

Tue Jul 26 15:20:59 BST 2016

มีวิธีการอื่นใดที่มีประโยชน์อีกบ้าง?

คำตอบ:


46

อย่าใช้lsนี่เป็นงานสำหรับstat:

stat -c '%y' filename

-cให้เราได้รับผลลัพธ์ที่เฉพาะเจาะจงที่นี่%yจะทำให้เราได้รับเวลาที่แก้ไขล่าสุดของไฟล์ในรูปแบบที่มนุษย์อ่านได้ ในการรับเวลาเป็นวินาทีตั้งแต่ Epoch ใช้%Y:

stat -c '%Y' filename

หากคุณต้องการชื่อไฟล์ด้วยให้ใช้%n:

stat -c '%y : %n' filename
stat -c '%Y : %n' filename

ตั้งค่าตัวระบุรูปแบบให้เหมาะกับความต้องการของคุณ man statตรวจสอบ

ตัวอย่าง:

% stat -c '%y' foobar.txt
2016-07-26 12:15:16.897284828 +0600

% stat -c '%Y' foobar.txt
1469513716

% stat -c '%y : %n' foobar.txt
2016-07-26 12:15:16.897284828 +0600 : foobar.txt    

% stat -c '%Y : %n' foobar.txt
1469513716 : foobar.txt

หากคุณต้องการผลลัพธ์เช่นTue Jul 26 15:20:59 BST 2016ใช้เวลา Epoch เป็นอินพุตเพื่อdate:

% date -d "@$(stat -c '%Y' a.out)" '+%a %b %d %T %Z %Y'
Tue Jul 26 12:15:21 BDT 2016

% date -d "@$(stat -c '%Y' a.out)" '+%c'               
Tue 26 Jul 2016 12:15:21 PM BDT

% date -d "@$(stat -c '%Y' a.out)"
Tue Jul 26 12:15:21 BDT 2016

ตรวจสอบตัวdateระบุรูปแบบเพื่อตอบสนองความต้องการของคุณ ดูman dateเช่นกัน


5
นอกเหนือจากคำตอบนี้โปรดจำไว้ว่าlsมีการใช้งานข้ามระบบอย่างไม่สอดคล้องกันดังนั้นจึงไม่ควรใช้กับระบบอัตโนมัติใด ๆ ให้ใช้คำสั่งเช่นstatและfindเมื่อเขียนสคริปต์แทน
Paddy Landau

1
ยอดเยี่ยม ฉันไม่รู้เกี่ยวกับสมบัติเล็กน้อยนี้ หลายคนในสภาพแวดล้อม * nix / linux ที่ยังไม่ถูกค้นพบ
Ken Ingram

1

ฉันเหนื่อย

ls -l $filename | cut -d ' ' -f '6-8'

แต่ถ้าวันที่น้อยกว่า 10 มันก็พลาดเวลา นี่เป็นเพราะพื้นที่พิเศษก่อนวันที่ถ้าน้อยกว่า 10 ลองนี้:

filename="test.txt"
ls -l $filename | awk -F ' ' '{print $6" "$7" "$8}'

คำสั่ง awk พิมพ์ฟิลด์ที่คั่นด้วยช่องว่างทั้งหมด (-F '') หวังว่ามันจะใช้งานได้ ฉันรู้ว่านี่ไม่ได้ตอบคำถามเดิม แต่เพียงชี้แจงในคำสั่ง ls เพียงวันที่และเวลา เมื่อคุณ Google "Ubuntu ได้รับวันที่และเวลาของไฟล์" มันจะแสดงคำถามนี้ที่ด้านบนซึ่งเป็นสิ่งที่ฉันกำลังมองหาเพราะฉันไม่ต้องการปี สำหรับปีวันที่และเวลาคุณสามารถลองใช้หนึ่งในคำสั่งด้านล่าง % m พิมพ์หมายเลขเดือน % b พิมพ์ตัวย่อของเดือน: วาง% H:% M หากคุณไม่ต้องการชั่วโมงและนาที % -d ไม่ได้พิมพ์ศูนย์นำหน้าสำหรับวันที่ของเดือน

date -r $filename +"%Y %m %-d %H:%M"
date -r $filename +"%y %m %-d %H:%M"
date -r $filename +"%Y %b %-d %H:%M"
date -r $filename +"%y %b %-d %H:%M"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.