ฉันจะสร้างลิงก์สัญลักษณ์ไปยังไดเร็กทอรีที่มีช่องว่างได้อย่างไร?


24

ฉันพยายามสร้างลิงค์สัญลักษณ์โดยใช้คำสั่งต่อไปนี้:

ln -s "~/Foo Bar/" Foo

... แต่มันไม่ทำงาน (เช่นเมื่อฉันเข้าไปในเครื่องมือค้นหาและลองคลิกสองครั้งมันบอกว่ามันชี้ไปยังเส้นทางที่ไม่ถูกต้องและแจ้งให้ฉันลบชื่อแทนหรือแก้ไข) ฉันต้องเปลี่ยนชื่อโฟลเดอร์เป็นFooBarแล้วเรียกใช้คำสั่งต่อไปนี้:

ln -s ~/FooBar/ Foo

ฉันจะสร้างลิงค์โดยไม่ต้องลบพื้นที่ออกจากชื่อโฟลเดอร์ได้อย่างไร

ฉันกำลังมองหาวิธีการทำสิ่งนี้ใน Terminal ไม่ใช่ใน Finder's UI


1
แม้ว่า Gordon Davisson นั้นถูกต้องคุณควรระวังว่าชื่อแทนและลิงก์สัญลักษณ์ (symlink) นั้นแตกต่างกัน ln -sทำให้ symlink Finder ทำให้นามแฝง พวกเขาเกือบจะเหมือนกันในทางปฏิบัติการใช้งานทั่วไป แต่มันเป็นสิ่งสำคัญที่จะรับรู้ว่าพวกเขามีความแตกต่างกัน Symlinks ชี้ไปที่เส้นทางไดเรกทอรีในขณะที่นามแฝงชี้ไปที่ไฟล์ หากคุณมีทั้งคู่ชี้ไปที่ไฟล์เดียวกันและคุณย้ายไฟล์ไปยังโฟลเดอร์อื่นให้สร้างไฟล์ใหม่ในโฟลเดอร์เก่านามแฝงจะชี้ไปที่ต้นฉบับที่ย้ายแล้ว symlink จะชี้ไปที่ไฟล์ใหม่
CajunLuke

1
@Cajun: ขอบคุณสำหรับการชี้แจง มันทำให้สับสนว่าเครื่องมือค้นหาแสดงคุณสมบัติ "ชนิด" ของลิงก์สัญลักษณ์เป็น "นามแฝง" ของลิงก์
เหตุผล

4
การทำให้แท็บสมบูรณ์เป็นสิ่งที่ยอดเยี่ยมเช่นกันหากคุณต้องทำสิ่งนี้: ln -s ~/Foo<tab>(โดยที่ <tab> หมายถึงคีย์⇥ (แท็บ) ที่แท้จริงบนแป้นพิมพ์ของคุณ) หากมีเพียงโฟลเดอร์เดียวที่ขึ้นต้นด้วย "Foo" ใน~นั้นจะอัตโนมัติ ~/Foo\ Bar/ขยายเส้นทางไปยัง
Jason Salaz

คำตอบ:


41

เครื่องหมายคำพูดป้องกันไม่ให้~ขยายไปยังโฟลเดอร์บ้านของคุณดังนั้นคุณต้องอ้างเฉพาะส่วนที่มีที่ว่างในนั้น:

ln -s ~/"Foo Bar/" Foo

หมายเหตุ: เท่าใดราคาที่ยกมาไม่สำคัญตราบเท่าที่พื้นที่อยู่ในส่วนที่ยกมาและ ~ / ไม่ ~/Foo" "Bar/, ~/"Foo Bar"/, ~/Fo"o B"ar/ฯลฯ เทียบเท่าทั้งหมด นอกจากนี้เดียวและสองครั้งที่คำพูดมีผลเช่นเดียวกันในช่องว่าง (แม้ว่าพวกเขาแตกต่างกันในตัวละครอื่น ๆ ) ดังนั้น~/'Foo Bar/', ~/Foo' 'Bar/ฯลฯ ก็จะทำงาน

คุณสามารถใช้การหลบหลีกเพื่อป้องกันไม่ให้พื้นที่ถูกถือว่าเป็นตัวคั่น:

ln -s ~/Foo\ Bar/ Foo

5
คุณพูดอย่างจริงจังเพียงแค่ช่องว่าง? ที่น่ากลัว!
Jason Salaz

"$HOME/Foo Bar/"หรือ
wchargin

@wchargin นั่นจะใช้ได้ โปรดทราบว่าไม่เหมือน~กัน$HOME ควรอยู่ในเครื่องหมายคำพูดคู่เพื่อป้องกันความสับสนหากไดเรกทอรีหลักของคุณมีช่องว่างหรืออักขระแปลก ๆ "$HOME/Foo Bar/"(ตามที่คุณแนะนำ) "$HOME"/Foo" "Bar/, "$HOME"/Foo\ Bar/ฯลฯ จะทำงาน
Gordon Davisson

0

ฉันทดสอบด้วยตัวเอง ฉันไม่มีปัญหากับช่องว่างในนั้น:

    $ ln -s "/Users/joe/test/foo bar"/ linkToFoo_Bar

ls แสดงให้เห็น: $ linkToFoo_Bar -> /Users/joe/test/foo bar/ และมันทำงานใน terminal และค้นหาโดยไม่มีปัญหาใด ๆ


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