Linux hanya menampilkan tanggal dan ukuran nama file


72

Bagaimana saya bisa menggunakan lsdi linux untuk mendapatkan daftar tanggal dan ukuran nama file saja. Saya tidak perlu melihat info lain seperti pemilik atau izin. Apakah ini mungkin?


1
lsbagus karena memiliki penyortiran yang sangat cepat berdasarkan datetime, tetapi formatnya sulit untuk ditangani. Saya sarankan menggunakan token pada --waktu-gaya seperti di --time-style='+&%Y%m%d+%H%M%S.%N'mana token adalah '&', menggunakan itu sebagai referensi Anda dapat mengurai output dengan lebih lanjut sedsehingga Anda juga dapat mundur karena tepat sebelum token adalah ukuran! Jika seseorang ingin memposting itu sebagai jawaban yang lengkap, silakan saja, saya juga tertidur sekarang :)
Aquarius Power

Jawaban:


98

Mengapa tidak menggunakan statbukan ls?

stat -c "%y %s %n" *

1
Ini bagus, tetapi berpotensi memiliki masalah "lingkungan terlalu besar" / "daftar argumen terlalu panjang".
Mat

4
:-) Hanya bukti konsep. Dalam Real Life [tm] ini akan menjadifind . -type f -print0 | xargs -0 stat -c "%y %s %n"
f4m8

5
Untuk memformat output dari stat, Anda dapat menambahkan lebar informasi ke format string seperti fungsi printf C, misalnya "%y %8s %n", itu tidak didokumentasikan, tetapi tampaknya karya (coreutils 8.17, Fedora 18)
Liuyan刘研

Karena dengan lssaya dapat mengeluarkannya dengan seribu pemisah char. Bagaimana cara kerjanya stat?
Al Bundy

Saya tidak melihat bagaimana ini menjawab pertanyaan ?! Ini solusi luar yang bagus, tetapi Anda akan kehilangan semua manfaat darinya ls. Bagaimana dengan warna ??
MS Berends

30

Anda bisa mendapatkan banyak kontrol tentang bagaimana Anda membuat daftar file dengan findutilitas. lstidak benar-benar membiarkan Anda menentukan kolom yang Anda inginkan.

Sebagai contoh:

$ find . -maxdepth 1 -printf '%CY%Cm%Cd.%CH%CM\t%s\t%f\n'
20111007.0601   4096    .
20111007.0601   2   b
20111001.1322   4096    a

Argumen untuk printftindakan adalah detail dalam halaman manual. Anda dapat memilih informasi waktu yang berbeda, ukuran apa yang Anda inginkan (ukuran file atau blok disk yang digunakan), dll. Anda juga dapat membuat ini aman untuk nama file yang tidak biasa jika diperlukan pemrosesan lebih lanjut.


1
Masukan di atas untuk menemukan ('% CY% Cm% Cd.% C ...') panjang. Setidaknya find GNU memiliki %C+(output "2016-08-29 + 10: 57: 56.9201257840") dan %Cc(output "Mo 29 Agt 2016 10:57:56 CEST")
guettli

Semoga ini berhasil di mac.
Jerinaw

indah, dan jika Anda ingin mencetak hanya path dan ukuran penuh, ini seharusnya berfungsi "find / path / to / -printf '% h /% f% s \ n'"
Pierluigi Vernetto

24

Anda selalu dapat menggunakan utilitas lain seperti awkmemformat output ls1 :

/bin/ls -ls | awk '{print $7,$8,$9}'


1.Ya, secara umum, Anda seharusnya tidak mem-parsing output ls tetapi dalam kasus ini pertanyaannya secara spesifik ...


Itu tidak mencetak ukuran file. Dan itu hanya mencetak bagian pertama dari nama file dengan spasi putih di dalamnya. Dan itu bisa gagal jika lsalias (katakanlah alias ls='ls -i'). Anda benar-benar harus sangat berhati-hati jika ingin melakukan parsing output ls.
Mat

Saya memiliki ukuran file di sana dan kemudian diedit (momen tidak jelas) - Saya akan mengembalikannya. Dan saya setuju tentang semua peringatan yang ulang ls, tetapi itulah yang diinginkan OP ...
jasonwryan

Saya tidak setuju, OP menginginkan nama file, bukan bagian pertama dari nama file jika nama file kebetulan memiliki spasi putih. (Menggunakan /bin/lsakan menghindari masalah alias.)
Mat

Itu dipahami secara implisit : apa yang dinyatakan secara eksplisit adalah bahwa OP menginginkan solusi lsyang kami berdua sepakati tidak akan memenuhi persyaratan spasi putih. The /bin/lssaran adalah satu yang baik.
jasonwryan

cintai solusi ini; sehubungan dengan komentar sebelumnya tentang tidak mencetak ukuran, Anda bisa mendapatkan ukuran dengan ls, dan dapat digunakan -huntuk membuatnya dapat dibaca oleh manusia. Secara khusus saya gunakan: ls -lah | awk '{print $5,$6,$7,$8}'yang menghasilkan: 4.0K Jan 24 18:17. Memang, solusi asli tidak mengatakan apa-apa tentang awk, tetapi di linux kita harus mengasumsikan output dari suatu proses akan selalu menjadi input untuk proses lain, kan? ;)
abgordon

5

Anda juga dapat menggunakan perintah 'date'. Sangat mudah digunakan:

date -r [nama file]


Bagus, ini baru bagiku. Sayangnya itu tidak berfungsi untuk beberapa file melalui globbing: date -r foo*.txt->date: extra operand "foo2.txt"
guettli

4

Jika Anda ingin menggunakan ls, tetapi mempertahankan ukuran yang tepat, Anda dapat menggunakan:

ls -Ss1pq --block-size=1

1

di mana ruang didefinisikan sebagai pemisah dan f6 berarti bidang 6

ls -lt | cut -d" " -f6-

2
gagal karena ls menggunakan spasi untuk indentasi dan kadang-kadang -f6- lain kali -f5-
Aquarius Power

1

Anda dapat menyalurkan dua perintah

ls -l|cut -d" " -f5

1
gagal karena ls menggunakan spasi untuk indentasi dan kadang-kadang -f6- lain kali -f5-
Aquarius Power

-1

ls -s1 mengembalikan ukuran file dan nama hanya di AIX, tidak yakin tentang Linux


2
Bisakah Anda menjelaskan bagaimana / mengapa Anda percaya ini menjawab pertanyaan?
Scott
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.