วิธีที่ง่ายที่สุดในการลบบรรทัด“ total <size>” ออกจากเอาต์พุตของ ls -l คืออะไร


14

สิ่งที่ดีที่สุดที่ฉันสามารถหาได้ผ่าน Google / man lsคือ:

ls -l | grep -v '^total'

มีบางอย่างที่ฉันขาดไปในธงlsไหม?

นอกจากนี้ทำไมขนาดโดยรวมเป็น kb โดยไม่คำนึงถึงแฟล็ก -h? รอยขีดข่วนที่ดูเหมือนว่ามันจะไม่แน่ใจว่าสิ่งที่ฉันได้เห็นแล้ว


4
อาจจะมีประสิทธิภาพมากกว่านิดหน่อยls -l | tail -n+2สำหรับที่เหลือฉันไม่มีคำตอบ
enzotib

ฉันชอบวิธีของ enzotib มากกว่า คำแนะนำ: lslตั้งขึ้นเป็นนามแฝงและชื่อ แค่ 3 ตัวอักษร;) โอ้และ ls -lh แสดงให้ฉันเห็นรูปแบบขนาด 1.2K
Rinzwind

ฉันคิดว่าคุณได้วิธีที่ง่ายที่สุดแล้ว
Robert

คำตอบ:


11

มองในรหัสที่มาของcoreutilsผมพบว่าtotalมักจะปรากฏขึ้นเมื่อใช้-lตัวเลือกไดเรกทอรี

โดยใช้ตัวเลือกที่จะแสดงรายการแทนไดเรกทอรีเนื้อหาหนัง-d totalแต่ถ้าคุณเรียกใช้โดยไม่มีข้อโต้แย้ง (หรือในไดเรกทอรี) มันจะแสดงไดเรกทอรีและไม่ใช่เนื้อหา ดังนั้นคุณต้องใช้สัญลักษณ์แทน *จับคู่ไฟล์ทั้งหมดและ.*จับคู่ไฟล์ที่ซ่อนไว้ด้วย (ซึ่งสอดคล้องกับ-aตัวเลือก):

ls -ld * .*

สำหรับ-hตัวเลือกมันใช้งานได้สำหรับฉัน 1118360 ไบต์แสดงเป็น 1.1M ไฟล์ที่เล็กกว่า 1024 แสดงเป็นไบต์


1
จริง ๆ -d แสดงรายการไดเรกทอรีแทนรายการ
H2ONaCl

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

ฉันจะลงคะแนนเสียงให้อีกครั้งถ้าทำได้
dps

7

โดยใช้สัญลักษณ์แทนเพื่อหลีกเลี่ยงการlsทำงานไดเรกทอรีรายชื่อคือก่อให้เกิดผลลัพธ์เพราะมันจะช่วยป้องกันคุณจากการใช้ตัวเลือกเช่นls--almost-all

เช่นเดียวกับข้อเสนอแนะของ Enzotibวิธีที่ง่ายที่สุดในการลบคือการไพพ์ผ่านtailเพื่อตัดบรรทัดแรก อย่างไรก็ตามlsจะตรวจสอบว่ามันส่งออกเป็นท่อมากกว่าการโต้ตอบและเปลี่ยนค่าเริ่มต้นในทางที่ไม่พึงประสงค์ ดังนั้นเพื่อให้มีประสิทธิภาพคุณควรเพิ่มตัวเลือกบางอย่าง:

  • --color=always: แสดงสีต่อไปเรื่อย ๆ
  • --hide-control-chars: พิมพ์?ชื่อไฟล์แทนอักขระควบคุมที่อาจทำให้เกิดความสับสนกับเอาต์พุตคอนโซล

ฉันมีสคริปต์~/bin/l(คุณสามารถใช้นามแฝงทุบตีใน~/.bash_aliases):

#!/bin/bash
ls -l --color=always --hide-control-chars "$@" | tail --lines=+2

นอกจากนี้คุณยังสามารถเพิ่มอื่น ๆตัวเลือกที่คุณต้องการโดยการเริ่มต้นเช่นls--group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash


อย่างไรก็ตามสิ่งนี้จะไม่ทำงานหากคุณผ่านหลายชื่อไฟล์ไปยัง ls
Sparhawk

3

ls -l *

จะทำให้คุณ "ตั้งชื่อตามปกติ" totalเนื้อหาของโฟลเดอร์โดยไม่ต้อง นั่นอาจจะเหมาะกับความต้องการของคุณ น่าเสียดายที่มันจะไม่ให้dotไฟล์นำหน้าแก่คุณ หากคุณใช้ls -l * .*คุณจะได้รับความยุ่งเหยิงตั้งแต่ linux จะนำทางขึ้นต้นไม้

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


1

$ ls -l [DIRECTORY] | sed 1d
(เอาต์พุตมีชื่อไฟล์)

$ ls -ld [path-to-dir]/*
(เอาต์พุตมีพา ธ สัมพัทธ์ แต่จะคงสีไว้)

$ ls -l [DIRECTORY] | tail -n +2

$ ls -l [DIRECTORY] | awk 'NR>=1'


หมายเหตุ:
ข้อมูลต่อไปนี้ใช้ไม่ได้หากคุณมีไฟล์ชื่อ "รวม .... "

$ ls -l | grep -v '^total'

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