คุณใส่วันที่และเวลาในชื่อไฟล์ได้อย่างไร?


23

ฉันพยายามรันคำสั่งและต้องการใส่วันที่และเวลาในชื่อไฟล์เอาต์พุต

นี่คือคำสั่งตัวอย่างที่ฉันต้องการเรียกใช้

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

รูปแบบเวลาวันที่สามารถเป็นสิ่งที่เหมาะสมกับขีดล่าง แม้ว่า UTC หากไม่สามารถใช้ AM และ PM


ถ้าไม่ใช่ Bash คุณใช้เปลือกอะไร?
Ryan

โอ้มันคือทุบตี ... ฉันหมายถึงทุบตีสคริปต์ *
visc

คุณไม่ได้ไปป์ไลน์คุณกำลังเปลี่ยนเส้นทาง และคำถามจะเหมือนกันถ้าคุณไม่ได้เปลี่ยนเส้นทาง กำลังอัปเดตชื่อ
มิเคล

คำตอบ:


46

หากคุณต้องการที่จะใช้วันที่และเวลาปัจจุบันเป็นชื่อไฟล์ที่คุณสามารถใช้dateและคำสั่งเปลี่ยนตัว

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

สิ่งนี้ส่งผลให้ไฟล์2016_04_25_10_30_AM.log(แม้ว่าโดยมีวันที่ปัจจุบัน) จะถูกสร้างขึ้นด้วย md5 hash /etc/mtabเป็นเนื้อหาของมัน

โปรดทราบว่าชื่อไฟล์ที่มีเวลาประทับรูปแบบ 12 ชั่วโมงอาจไม่เรียงตามชื่อที่คุณต้องการเรียงลำดับ คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยใช้การประทับเวลารูปแบบ 24 ชั่วโมงแทน

หากคุณไม่มีข้อกำหนดในการใช้รูปแบบวันที่นั้นคุณอาจลองใช้รูปแบบวันที่และเวลาที่สอดคล้องกับ ISO 8601 ตัวอย่างบางส่วนของวิธีการสร้างการแทนค่าเวลามาตรฐาน ISO 8601 ที่ถูกต้อง ได้แก่ :

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

หากคุณต้องการชื่อไฟล์ "ปลอดภัย" (เช่นสำหรับความเข้ากันได้กับ Windows) คุณสามารถละเว้นเครื่องหมายโคลอนได้จากส่วนเวลา

โปรดทราบว่าตัวอย่างข้างต้นทั้งหมดถือว่าเวลาของระบบในท้องถิ่น หากคุณต้องการการแสดงเวลาที่สอดคล้องกันในเขตเวลาต่างๆคุณควรระบุการชดเชยเวลาในเขตเวลาหรือ UTC คุณสามารถรับการชดเชยเวลาในเขตเวลาที่สอดคล้องกับ ISO 8601 ได้โดยใช้ "% z" ในส่วนรูปแบบของการdateโทรของคุณดังนี้:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

คุณสามารถรับเวลา UTC ในการdateโทรของคุณโดยระบุการ-uตั้งค่าสถานะและเพิ่ม "Z" ต่อท้ายสตริง datetime เพื่อระบุว่าเวลาเป็น UTC ดังนี้:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z

@ Mikel คุณและฉันไขว้แก้ไขไหม?
Ryan

อาจ ฉันเพิ่งเปลี่ยน "subshell" เป็น "การทดแทนคำสั่ง" ฉันเสร็จแล้วดังนั้นโปรดแก้ไขตามที่คุณต้องการ
มิเคล

@Mikel ไม่มีปัญหา ฉันส่งการแก้ไขอีกครั้ง
Ryan

@Mikel ไม่ต้องกังวล! ฉันควรจำได้ว่าเรียกมันว่า "การทดแทนคำสั่ง" แต่อย่างใด ขอบคุณสำหรับการปรับปรุงคำตอบ!
Ryan

3
ขีดเส้นใต้เป็นตัวละครที่แปลก เป็นที่ต้องการที่จะใช้ ISO-8601 ชอบที่จะให้$(date +%FT%T) 2016-04-25T10:30:00
hschou
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.