วิธีการ cd ไปยังไดเรกทอรีที่มีชื่อที่มีช่องว่างในทุบตี?


84

ฉันเหนื่อย cd "~/Library/Application Support/" -bash: cd: ~/Library/Application Support/: No such file or directory

ด้วย cd ~/Library/Application Support/ -bash: cd: ~/Library/Application Support/: No such file or directory

คำตอบ:


113

คุณสามารถใช้Tabปุ่มได้หลังจากกดอักขระสองสามตัวแรก (ซึ่งจะเป็นการ "เติม" ส่วนที่เหลือของโฟลเดอร์ให้คุณเช่นcd ~/LTabเติมcd ~/Library/ชนิดแล้วพิมพ์ApTabและมันจะเติมส่วนที่เหลือให้คุณ

หากมีช่องว่างระหว่างคำและคุณไม่ต้องการที่จะใช้วิธีการดังกล่าวข้างต้นให้ใส่\(ทับขวา) cd ~/Library/Application\ Supportก่อนพื้นที่เช่น


ตัวพิมพ์เล็กหรือตัวพิมพ์เล็กหรือไม่ ฉันสามารถเข้าถึง Library ด้วย cd ~ / library แต่วิธีแท็บจะไม่ทำงานหากฉันพบปัญหา
colinfang

@colinfang OS X ไม่คำนึงถึงขนาดตัวพิมพ์ เปลือกทุบตีจะต้องแยกแยะอีกเล็กน้อยเมื่อมันมาถึงการเติมข้อความอัตโนมัติ
NReilingh

@NReilingh - Aha ขอบคุณ
colinfang

1
@colinfang: คุณสามารถใช้shopt -s nocaseglobและbind 'set completion-ignore-case on'ทำให้bashไม่ไวต่อตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
Chris Johnsen

2
colinfang - สำหรับแท็บที่ไม่ต้องคำนึงถึงตัวพิมพ์เล็กและใหญ่ด้วยความเข้ากันได้ของ bash ลอง 'zsh' นอกจากนี้ความสมบูรณ์ของสัญลักษณ์แทนของเชลล์นี้ก็ดีมากเช่นกัน
ⱮarkƬ

27

ประเด็นหลักที่นี่คือวิธีที่เชลล์ ( ทุบตี ) ทำการอ้างอิงและวิธีที่มีผลต่อการขยายตัวหนอนและแยกออกเป็น "คำ" (อาร์กิวเมนต์สำหรับโปรแกรมที่กำลังทำงาน)

ทุบตีให้ถือว่าตัวหนอนนำโดยเฉพาะถ้ามันไม่ได้ยกมา นอกจากนี้ต้องไม่ยกเครื่องหมายทับต่อไปนี้

ในขณะเดียวกันbash parses จะแยกบรรทัดคำสั่งเป็น "words" โดยอ้างอิงจาก whitespace โดยcdทั่วไปคำสั่งนั้นต้องการอาร์กิวเมนต์หนึ่งตัว (ไดเรกทอรีปลายทาง) บรรทัดคำสั่งเช่นcd foo barหมายถึงการทำงานcdที่มีสองข้อโต้แย้ง: และfoo barหากคุณเพียงแค่ต้องการส่งfoo barอาร์กิวเมนต์เดียวคุณจะต้องอ้างถึงช่องว่าง:
(เช่น) cd foo\ bar(ดูตัวอย่างข้อความเพิ่มเติมด้านล่าง)

ในสถานการณ์เฉพาะของคุณคุณต้องปล่อยเครื่องหมายตัวหนอนและเครื่องหมายสแลชต่อไปนี้โดยไม่ต้องใส่เครื่องหมายคำพูดในขณะที่อ้างอิงช่องว่างในชื่อไดเรกทอรี การcd "~/Library/Application Support/"พิจารณาคดีของคุณจบลงด้วยการอ้างข้อความมากเกินไป (เครื่องหมายตัวหนอนและเครื่องหมายทับ) ในขณะที่การcd ~/Library/Application Support/ทดลองใช้ของคุณมีราคาน้อยเกินไป (ไม่ต้องเว้นช่องว่างในชื่อไดเรกทอรี)

วิธีแก้ปัญหาที่พบบ่อยที่สุดคือการใช้การเว้นอักขระเดียวเพื่ออ้างอิงพื้นที่:

    cd ~/Library/Application\ Support

นอกจากนี้คุณยังสามารถใช้เครื่องหมายคำพูดเดี่ยวหรือคู่ประมาณทั้งช่องว่างหรือช่องว่างและบิตอื่น ๆ ของอาร์กิวเมนต์ (แต่ไม่ใช่~/!):

    cd ~/Library/Application' 'Support
    cd ~/Library/Application" "Support
    cd ~/Library/App'lication 'Support
    cd ~/Library/Application" Supp"ort
    cd ~/'Library/Application 'Support
    cd ~/"Library/Application "Support

คำพูดประเภทนี้มีความหมายต่างกัน แต่เหมือนกันในตัวอย่างเหล่านี้ เครื่องหมายคำพูดเดี่ยวปกป้องสตริงตัวอักษรในขณะที่เครื่องหมายคำพูดคู่อนุญาตการขยายและการแทนที่ต่างๆในภูมิภาคที่ยกมา

บ่อยครั้งที่คุณปล่อยให้เปลือกทำงานให้คุณ

  • Globbing (สัญลักษณ์):

    cd ~/L*/Ap*

    คุณสามารถใช้shopt -s nocaseglobเพื่อทำให้ตัวพิมพ์เล็กและตัวพิมพ์เล็ก:

    cd ~/l*/ap*
  • แล้วเสร็จ:

    กดTabหลังจากที่เข้ามาอาจจะขยายไปยังcd ~/L การกดอีกครั้งหลังจากเข้า(ตอนนี้คุณมี) อาจจะขยายไปที่(เปลือกใส่เครื่องหมายแบ็กสแลชหนีโดยอัตโนมัติ)cd ~/Library/
    TabApcd ~/Library/Apcd ~/Library/Application\ Support/

    คุณสามารถใช้bind 'set completion-ignore-case on'เพื่อทำให้ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เสร็จ:

    cd ~/l Tabcd ~/Library/; ap Tabcd ~/Library/Application\ Support/


คำตอบที่ดี @Chris คุณได้รับอักขระแท็บให้ดูเหมือนแป้นได้อย่างไร
robzolkos

4
@RobZ: เป็น<kbd></kbd>แท็ก HTML (หนึ่งในหลายแท็ก HTML ที่รองรับใน SE markdown )
Chris Johnsen

9

เมื่อคุณอ้างถึงเส้นทางสองครั้งคุณจะหยุดการขยายตัวหนอน ดังนั้นมีสองสามวิธีในการทำสิ่งนี้:

cd ~/"My Code"
cd ~/'My Code'

เครื่องหมายตัวหนอนจะไม่ถูกยกมาที่นี่ดังนั้นการขยายตัวหนอนจะยังคงทำงาน

cd "$HOME/My Code"

คุณสามารถขยายตัวแปรสภาพแวดล้อมภายในสตริงที่มีเครื่องหมายคำพูดคู่ นี่เป็นสิ่งที่การขยายตัวของตัวหนอนทำ

cd ~/My\ Code

นอกจากนี้คุณยังสามารถหลีกเลี่ยงอักขระพิเศษ (เช่นช่องว่าง) ด้วยแบ็กสแลช


9

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



0

%20หากวิธีปกติไม่ได้ทำงานพยายามพื้นที่แทน

นี้ทำงานให้ฉันเมื่อต้องรับมือกับ SSH และโดเมนแบบอื่น ๆ auto_smbคำสั่งเช่น


0

คุณสามารถลองทำสิ่งนี้สำหรับโฟลเดอร์ / ไฟล์ที่เว้นระยะโดยหากชื่อไฟล์หรือโฟลเดอร์มี 1) ชื่อไฟล์คำสั่งควรเป็น cd ~ / file \ name.extension / (หรือ) cd ~ / "ชื่อไฟล์นามสกุล" /


1
คำตอบนี้แตกต่างหรือปรับปรุงตามคำตอบข้ออื่น ๆ ที่คล้ายกันอย่างไร
fsb

มันเป็นรูปแบบเทอร์มินัลที่สมบูรณ์แบบสำหรับการกำหนดพื้นที่และการเสนอราคาเป็นหนึ่งในผู้ใช้ที่กำหนดไว้และการใช้คีย์แท็บไม่ใช้ชื่อเช่น 1) filename.ext 2) ชื่อไฟล์ต่อไปในขณะที่กดแท็บสำหรับชื่อประเภทนี้อัตโนมัติ ความสมบูรณ์ของคำจะแสดงเกิน "ไฟล์" ในเวลานั้นเราสามารถใช้เครื่องหมายแบ็กสแลชนี้เพื่อกำหนดพื้นที่ในเทอร์มินัล @fsp
prasanth sivanesan

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