ฉันจะเปลี่ยนรูปแบบเวลาที่ใช้โดยบรรทัดคำสั่ง ls บน osx ได้อย่างไร


27

ฉันต้องการให้lsแสดงเวลาในISOรูปแบบ (รูปแบบทหาร) ฉันจะเปลี่ยนพฤติกรรมนี้ได้อย่างไร

บน Linux ฉันรู้ว่าฉันสามารถบังคับให้ ls แสดงเวลาในรูปแบบยาวโดย usin --full-timeแต่สิ่งนี้ไม่ทำงานบน OS X

อัปเดต: ฉันรู้ว่ารูปแบบที่ใช้โดยคำสั่งนั้นเป็นไปตามการlocaleตั้งค่า ปัญหาคือว่าใน OS LC_TIME=en_DKจินไม่สามารถที่จะใช้เคล็ดลับของการตั้งค่า


1
คำตอบที่ไม่เป็นไปได้ แต่ยังคงมีประโยชน์: คำสั่ง stat (1) ค่อนข้างยืดหยุ่นและสามารถแสดงการประทับเวลาในรูปแบบที่ต้องการได้
Harald Hanche-Olsen

gls (gnu ls) ฉันพูดถึงในคำตอบของฉันสามารถใช้ --style = flag ซึ่งคุณสามารถระบุสตริง + FORMAT เพื่อให้คุณสามารถทำให้วันที่ปรากฏตามที่คุณต้องการ
barryj

ฉันหวังว่าฉันจะรู้วิธี คู่มือ BSD ของ Apple สำหรับlsดูเหมือนว่าจะไม่ให้อะไรกับการจัดรูปแบบข้อมูลนอกเหนือจากการเปลี่ยนเขตเวลาและการเรียงลำดับตามวันที่และเวลาแทนที่จะเป็นอัลฟา developer.apple.com/library/mac/documentation/Darwin/Reference/
......

คำตอบ:


16

หากคุณติดตั้ง gnu coreutils gnu ls จะพร้อมใช้งานซึ่งจะทำตามที่ต้องการ หากคุณใช้ชงเป็นผู้จัดการแพคเกจมันง่ายเหมือน:

brew install coreutils
gls -l --time-style=full-iso

ขอบคุณสิ่งนี้มีประโยชน์ แต่ไม่สามารถแก้ปัญหาได้ รูปแบบที่ใช้เต็มรูปแบบยังคงไม่ใช่ ISO-8601
Sorin

ตกลง - คุณสามารถติดตั้ง gnu coreutils ซึ่งรวมถึง gnu ls ซึ่งจะทำสิ่งที่คุณต้องการ วิธีที่ง่ายที่สุดคือการชง, MacPorts หรือ Fink ฉันใช้บริว - ดังนั้นเพียงแค่เรียกใช้งาน 'ชงติดตั้ง coreutils' จากนั้นคุณจะมี GLS ให้ใช้งาน
barryj

1
โดยเฉพาะอย่างยิ่งbrew install coreutilsผลใน/usr/local/bin/glsการติดตั้งเพื่อให้คุณจำเป็นต้องเรียกใช้แทนgls ls
erik.weathers

คุณต้องระบุรูปแบบเวลาด้วยgls -l --time-syle="+%I"(หรือgdateรูปแบบสไตล์ที่ถูกต้องสำหรับ ISO-8601)
rubynorails

ดังนั้นการโทรที่ถูกต้องนั้น gls -l --time-style = full-iso
AnneTheAgile

13

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

stat -l -t '%FT%T' *

การ%FT%Tผลิตการประทับเวลาในท้องถิ่น ISO8601 เพิ่ม%zถ้าคุณต้องการออฟเซ็ต UTC

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

stat -l -t '%F%T' * | tr ' ' \\t

อีกวิธีหนึ่งฉันคิดว่ามันควรจะเป็นไปได้ที่ls -lจะสร้างการประทับเวลา ISO8601 โดยการกำหนดสถานที่ที่กำหนดเอง แต่ฉันไม่ได้เห็นมันทำ


-1

ls -l --time-style=iso ทำงานได้ดีสำหรับฉัน


1
ไม่ สิงโตภูเขา.
Nakilon

2
ไม่ได้อยู่ใน Mavericks เช่นกัน
สะพานดินเหนียว

4
มันอาจใช้งานได้ดีสำหรับ OP เพราะเขาหรือเธอได้ติดตั้งระบบที่ไม่ใช่lsโดยไม่รู้ตัวผ่านทางผู้จัดการแพ็คเกจเช่นชง
สาหร่าย

1
เห็นด้วยกับ @algal ฉัน/usr/local/bin/glsติดตั้งผ่านbrew install coreutilsแล้วและรองรับ--time-styleตัวเลือกนั้น สหกรณ์อาจจะมีการทำงานbrew install coreutils --with-default-namesซึ่งจะส่งผลใน/usr/local/bin/lsการติดตั้ง (ในหมู่สาธารณูปโภคอื่น ๆ ) หรืออาจจะ OP ตั้งขึ้น symlink glsด้วยตนเองเพื่อ
erik.weathers

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