Bagaimana cara mengubah format waktu yang digunakan oleh ls command line di osx?


27

Saya ingin membuat lswaktu tampilan dalam ISOformat (format militer). Bagaimana saya bisa mengubah perilaku ini?

Di Linux saya tahu bahwa saya bisa memaksa ls untuk menampilkan waktu dalam format panjang oleh kami, --full-timetetapi ini tidak berfungsi pada OS X.

Pembaruan: Saya tahu bahwa format yang digunakan oleh perintah didasarkan pada localepengaturan. Masalahnya adalah bahwa pada OS XI tidak dapat menggunakan trik pengaturan LC_TIME=en_DK.


1
Jawaban yang tidak dijawab, tetapi tetap berguna: Perintah stat (1) cukup fleksibel dan dapat dibuat untuk menampilkan perangko waktu dalam format apa pun yang diinginkan.
Harald Hanche-Olsen

gls (gnu ls) yang saya sebutkan di jawaban saya dapat mengambil --style = flag di mana Anda dapat menentukan string + FORMAT, sehingga Anda dapat membuat tanggal muncul apa pun yang Anda inginkan.
barryj

Saya berharap saya tahu cara. Manual BSD Apple untuk lstampaknya tidak menawarkan apa pun untuk memformat datetimes, selain mengubah zona waktu dan mengurutkan berdasarkan datetime daripada alpha. developer.apple.com/library/mac/documentation/Darwin/Reference/…
jtheletter

Jawaban:


16

Jika Anda menginstal gnu coreutils maka gnu ls tersedia, yang akan melakukan apa yang diperlukan. Jika Anda menggunakan minuman sebagai pengelola paket, sesederhana:

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

Terima kasih, ini berguna tetapi tidak menyelesaikan masalah. Format lengkap yang digunakan masih belum ISO-8601.
Sorin

OK - Anda dapat menginstal gnu coreutils yang mencakup gnu ls, yang akan melakukan apa yang Anda inginkan. Cara termudah adalah salah satu buatan, MacPorts atau Fink. Saya menggunakan brew - jadi jalankan saja 'brew install coreutils'. Anda kemudian akan memiliki gls tersedia.
barryj

1
Khususnya, brew install coreutilsmenghasilkan /usr/local/bin/glsdiinstal, jadi Anda harus menjalankan glsbukan ls.
erik.weathers

Anda perlu menentukan format waktu dengan gls -l --time-syle="+%I"(atau apa pun gdateformat gaya yang benar untuk ISO-8601).
rubynorails

Panggilan yang benar dengan demikian; gls-l - time-style = full-iso
AnneTheAgile

13

Perintah bawaan OS X lstidak memerlukan waktu untuk memformat argumen, tetapi statperintah tersebut mengambil string format strftime sehingga Anda bisa mendapatkan perkiraan tentang apa yang Anda inginkan dengan melakukan:

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

The %FT%Tmenghasilkan ISO8601 timestamp lokal. Tambahkan a %zjika Anda ingin offset UTC.

Tetapi sementara cap waktu tepat, sisanya hanya mendekati apa yang akan Anda dapatkan dari ls. Misalnya, ls -ldengan benar menyelaraskan bidang ke dalam kolom, dapat mewarnai keluaran, dan tentu saja mencantumkan konten direktori daripada mengharuskan Anda untuk meneruskan semua nama file sebagai argumen. Anda setidaknya dapat mereproduksi penyelarasan yang tepat dengan menyalurkan output melalui truntuk mengubah semua spasi menjadi tab:

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

Atau, saya pikir mungkin untuk bisa ls -lmenghasilkan cap waktu ISO8601 dengan mendefinisikan lokal kustom, tapi saya belum melihatnya selesai.


-1

ls -l --time-style=iso bekerja dengan baik untuk saya.


1
Tidak. Singa gunung.
Nakilon

2
Tidak di Mavericks juga.
Clay Bridges

4
Ini mungkin bekerja dengan baik untuk OP, karena dia telah menginstal non-sistem lstanpa menyadarinya, melalui manajer paket seperti minuman.
algal

1
Setuju dengan @algal. Saya telah /usr/local/bin/glsmenginstal via brew install coreutils, dan itu mendukung --time-styleopsi. OP mungkin telah berjalan brew install coreutils --with-default-namesyang akan menghasilkan /usr/local/bin/lsdiinstal (di antara utilitas lain), atau mungkin OP mengatur symlink manual gls.
erik.weathers

Apa yang Anda lihat saat masuk which ls?
mschaef
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.