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


25

ฉันจะใช้งานlsใน linux เพื่อรับรายชื่อวันที่และขนาดไฟล์ได้อย่างไร ฉันไม่ต้องการเห็นข้อมูลอื่น ๆ เช่นเจ้าของได้รับอนุญาต


ลีนุกซ์ชนิดใดที่เรากำลังพูดถึง?
tolitius

เซิร์ฟเวอร์ apache ..

คำตอบ:


26

ls -l | awk '{print $5, $6, $7, $9}'

นี่จะพิมพ์ขนาดไฟล์เป็นไบต์, เดือน, วันที่และชื่อไฟล์

jin@encrypt /tmp/foo % ls -l
total 0
drwxr-xr-x  2 jin  wheel  68 Oct  4 12:43 bar
drwxr-xr-x  2 jin  wheel  68 Oct  4 12:43 baz
drwxr-xr-x  2 jin  wheel  68 Oct  4 12:43 quux

jin@encrypt /tmp/foo % ls -l | awk '{print $5, $6, $7, $9}'
68 Oct 4 bar
68 Oct 4 baz
68 Oct 4 quux

@Sukukudo ใช่ฉันไม่แน่ใจเหมือนกัน แต่ผู้คนดูเหมือนจะยอมรับว่ามันเป็นการตกลงที่จะลบล้างคำถามที่ไม่ดี แต่ไม่ใช่คำตอบหากพวกเขามีประโยชน์ meta.stackexchange.com/questions/98197/…
Jin

@Sosukodo: อย่าลังเลที่จะ
โหวต

6
ไม่รองรับชื่อไฟล์ที่มีหลายช่องว่าง
meso_2600

12

ในทางเทคนิคมันเป็นไปไม่ได้ด้วยlsแต่findสามารถทำงานเดียวกันกับ-printfสวิตช์ของมัน:

find -maxdepth 1 -printf '%t %s %p\n'

1
คุณแนะนำว่าเป็นผู้ชนะของฉันและฉันขอแนะนำว่าหากผู้คนสนใจในฟิลด์เพิ่มเติมสำหรับ printf พวกเขา RTFM ตัวอย่างเช่นแสดงสิทธิ์สำหรับไฟล์ทั้งหมดที่ไม่ได้เป็นไดเรกทอรี: find usr/lib/ -not -type d -printf '%M %p\n เอาท์พุท: -rw-r--r-- usr/lib/x86_64-linux-gnu/apr-util-1/apr_crypto_openssl-1.so... สอนให้คนตกปลาและสิ่งที่ ...
Craig

คำถามเกี่ยวกับ linux ดังนั้นคำตอบที่ไม่สมเหตุสมผล แต่สำหรับบันทึกนี้ต้องใช้ GNU find
Dan Pritts

5

คุณสามารถทำได้:

$ ls -l
total 0
-rw-r--r--  1 user  staff  0 Oct  6 23:29 file1
-rw-r--r--  1 user  staff  0 Oct  6 23:29 file2
-rw-r--r--  1 user  staff  0 Oct  6 23:30 file3
-rw-r--r--  1 user  staff  0 Oct  6 23:30 file4
-rw-r--r--  1 user  staff  0 Oct  6 23:30 file5
-rw-r--r--  1 user  staff  0 Oct  6 23:30 file6
-rw-r--r--  1 user  staff  0 Oct  6 23:30 file7

cut มันไปที่:

$ ls -l | cut -f 8-13 -d ' '

0 Oct  6 23:29 file1
0 Oct  6 23:29 file2
0 Oct  6 23:30 file3
0 Oct  6 23:30 file4
0 Oct  6 23:30 file5
0 Oct  6 23:30 file6
0 Oct  6 23:30 file7

$ 

4
ไม่ทำงานกับ: ความเป็นเจ้าของตัวแปร, กลุ่ม, ขนาดไฟล์
meso_2600

การตัดไม่ยุบตัวคั่นติดกันซึ่งls -lใช้ช่องว่างภายในเป็นช่องว่าง หากคอลัมน์ของคุณมีความยาวไม่สม่ำเสมอ (คอลัมน์ใดคอลัมน์ที่ 5 ขนาดไฟล์มักจะไม่อยู่) การตัดจะไม่เลือกคอลัมน์อย่างถูกต้อง การยุบช่องว่างที่ต่อเนื่องกันจะช่วยได้ (ระวังช่องว่างในชื่อไฟล์) ls -l | tr -s ' ' | cut -f 8-13 -d ' '
เดฟ

4

อีกlsวิธีที่ไม่:

> stat --printf='%y\t%12s\t%-16n|\n' tmp.*
2017-06-15 10:42:07.252853000 +0200         10485760    tmp.1           |
2017-06-15 10:41:25.659570000 +0200              666    tmp.TKPzm3BfRw  |

คำอธิบาย: %y= วันที่แก้ไขที่มนุษย์สามารถอ่านได้; %s= ขนาดเป็นไบต์ ( %12sชิดขวา, ความยาว 12); %n= ชื่อไฟล์ ( %-16nจัดชิดซ้าย, ความยาว 16); \t= tab, \n= linefeed |= char pipe ตามตัวอักษรเพียงเพื่อแสดงจุดสิ้นสุดของชื่อไฟล์

ชอบls, statมีตัวเลือกในการเลือกไฟล์ที่จะแสดง (ซึ่งสามารถทำได้โดยเชลล์กลมดังแสดงด้านบนหรือบางfind ... -print0 | xargs -r0 stat ...ตัวอย่าง)


คำถามเกี่ยวกับ linux ดังนั้นคำตอบของคุณก็ดี แต่สำหรับทุกคนที่ใส่ใจนี่เทียบเท่ากับสถิติ FreeBSD stat -f '%N %Sm %z' filename
Dan Pritts

2

การเปลี่ยนแปลงเล็กน้อยบน tolitius

ls -lh | cut -f 6- -d ' '

1
สนใจที่จะอธิบายสิ่งที่เปลี่ยนแปลงเพิ่ม?
Ivo Flipse

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