เหตุใดสัญลักษณ์นี้จึงไม่ทำงานตามที่ฉันคาดหวัง


11

ในโฟลเดอร์ผู้ใช้ของฉันฉันมีโฟลเดอร์เช่นD ropbox, D ocuments, D ownloads & d ump

ls a*aควรรายการไฟล์ทั้งหมดที่มีชื่อเริ่มต้นด้วย ขวา? แต่เมื่อฉันให้คำสั่งls d*แทนที่จะแสดงเพียงdumpมันแสดง ls ของไดเรกทอรีการถ่ายโอนข้อมูล และเมื่อฉันให้คำสั่งเป็นls D*แล้วมันจะแสดง ls ของเท่าทั้งหมดเริ่มต้นด้วยD

ดังนั้นส่วนไหนที่ฉันไม่เข้าใจ

แก้ไข:การแนบภาพหน้าจอ ภาพหน้าจอของ ls

คำตอบ:


17

ตามหน้าคนทุบตี:

bash สแกนแต่ละคำเพื่อหาอักขระ *,?, และ [. หากหนึ่งในอักขระเหล่านี้ปรากฏขึ้นคำนั้นจะถือเป็นรูปแบบและแทนที่ด้วยรายการที่เรียงลำดับตามตัวอักษรของชื่อไฟล์ที่ตรงกับรูปแบบ

และจากโหนดข้อมูลสำหรับls

โปรแกรม `ls 'แสดงรายการข้อมูลเกี่ยวกับไฟล์ (ทุกประเภทรวมถึงไดเรกทอรี) ตัวเลือกและข้อโต้แย้งไฟล์สามารถผสมโดยพลการตามปกติ

สำหรับอาร์กิวเมนต์บรรทัดคำสั่งที่ไม่ใช่ตัวเลือกที่เป็นไดเรกทอรีโดยค่าเริ่มต้น 'ls' จะแสดงรายการเนื้อหาของไดเรกทอรีไม่เรียกซ้ำและละเว้นไฟล์ที่มีชื่อขึ้นต้นด้วย '.' สำหรับอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกอื่น ๆ โดยค่าเริ่มต้น `ls 'รายการเพียงชื่อไฟล์ หากไม่มีการระบุอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก 'ls' จะแสดงรายการเนื้อหาของไดเรกทอรีปัจจุบัน

ดังนั้นเมื่อ yo give ls d*, d *จะถูกขยายไปยังรายการเรียงลำดับของชื่อไฟล์ / ไดเรกทอรีทั้งหมดที่เริ่มต้นด้วย d ดังนั้นคุณจึงกลายเป็นคำสั่ง

ls dump

และในขณะที่การถ่ายโอนข้อมูลเป็นชื่อไดเรกทอรีให้คุณได้รับรายชื่อของไฟล์ทั้งหมดในไดเรกทอรี "การถ่ายโอนข้อมูล แต่เมื่อคุณได้ให้ls D*, D *มีการขยายไปยัง ' เอกสารสก์ท็อปดาวน์โหลด Dropbox ' ดังนั้นคำสั่งจะกลายเป็น

ls Desktop Documents Downloads Dropbox

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


2
การเพิ่มเล็กน้อย: เมื่อกำหนดมากกว่าหนึ่งไดเรกทอรีให้เป็นอาร์กิวเมนต์ ls จะแสดงชื่อของแต่ละไดเรกทอรีก่อนที่จะแสดงเนื้อหา มันจะไม่ทำมันสำหรับไดเรกทอรีเดียว
Marcel Stimberg

ขอบคุณ! นั่นเป็นการเคลียร์ข้อสงสัยของฉัน ผมls p*และมันแสดงให้เห็นถึงไฟล์เพราะมันมีอยู่และls P*การแสดงภาพสาธารณะโฟลเดอร์ที่มีไฟล์ไม่เริ่มต้นด้วยP และเมื่อฉันสร้างไดเรกทอรีชื่อpooมันจะปรากฏขึ้นบนls p*
Ashfame

7

ls d * และ D * ทั้งรายการไฟล์และโฟลเดอร์ที่ตรงกับ d * และ D * ตามลำดับลักษณะการทำงานเดียวกันจะต้องมีข้อผิดพลาดในการทดสอบของคุณ

หากคุณต้องการแสดงรายการเฉพาะชื่อโฟลเดอร์และไม่ใช่เนื้อหาของโฟลเดอร์คุณต้องใช้ "-d":

ls -d D*

ฉันได้แนบภาพหน้าจอโปรดดู
Ashfame

0

ตามที่แนะนำข้างต้น-dตัวเลือกเป็นวิธีที่จะไป เพิ่ม

alias ld='ls -d'

~/.bashrcไฟล์ของฉันทำงานได้ดีสำหรับฉัน


3
ด้วยนามแฝงนี้คุณบล็อกการเข้าถึงได้ง่ายld - The GNU linkerซึ่งจะทำให้ OP จากการรวบรวมและการเชื่อมโยงโปรแกรม ใช้alias lsd='ls -d'แทน ก่อนที่จะสร้างนามแฝงบางสิ่งบางอย่างเช่นfooเคยทำtype fooเพื่อดูว่าfooมีการใช้ชื่อของบางสิ่งบางอย่างอยู่แล้วและตัดสินใจfoo
ว่าความ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.