ฉันจะเชื่อมโยงแต่ละไฟล์ในหนึ่งไดเรกทอรีไปยังไดเรกทอรีอื่นได้อย่างไร


15

หากฉันมีไดเรกทอรีที่/fooมีไฟล์อยู่สองสามตัวฉันจะเชื่อมโยงแต่ละรายการ/fooเข้าด้วยกันได้/bar/อย่างไร

ตัวอย่างเช่นถ้า/fooมีไฟล์a, bและcผมต้องการที่จะสร้างสาม symlinks:

  • /bar/a -> /foo/a
  • /bar/b -> /foo/b
  • /bar/c -> /foo/c

คุณแน่ใจหรือไม่ว่าไม่ต้องการ symlink bar เพื่อ foo
Rich Bradshaw

แอปพลิเคชันที่แท้จริงของสิ่งนี้คือฉันติดตั้งโปรแกรมและต้องการย้ายไฟล์ปฏิบัติการไปยังโฟลเดอร์มาตรฐานใน $ PATH แทนที่จะเพิ่มแอปที่ติดตั้งลงในพา ธ
Steven

--prefix=ดูเหมือนว่ามันจะเป็นความคิดที่ดีที่จะเพียงแค่กำหนดค่าด้วย
Hello71

คำตอบ:


18

คุณสามารถใช้ (GNU) cpพร้อม--symbolic-linkตัวเลือก:

prompt$ mkdir foo
prompt$ cd foo
prompt$ touch a b c
prompt$ mkdir ../bar
prompt$ cd ../bar
prompt$ cp --symbolic-link ../foo/* .
prompt$ ls -l
total 0
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 a -> ../foo/a
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 b -> ../foo/b
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 c -> ../foo/c
prompt$

นี่น่าจะเป็นทางออกอย่างแท้จริง ! น่ากลัว
Steven

มันสมบูรณ์แบบมาก
noraj

มีวิธีใดบ้างที่จะทำให้สิ่งนี้ใช้ได้กับไดเร็กทอรีด้วย? เมื่อฉันเรียกใช้สิ่งนี้ฉันจะได้รับคำเตือน "cp: การละเว้นไดเรกทอรี './baz'"
solidau

15

ลองดูสิ:

ln -s /foo/* /bar

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

ln -s /some/dir/with/baz/* destdir
ln -s /dir/to/link/from/* /dir/to/link/to
ln -s $PWD/stuff/* more/stuff

มันใช้งานได้หรือไม่
ctrlc-root

@ root.ctrlc: คุณต้องระบุเส้นทางแบบเต็มของแหล่งที่มา (ซึ่งเป็น/คำตอบเดิมของฉัน) ฉันจะเพิ่มคำอธิบาย
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

ฉันคิดว่าถ้าคุณต้องการคัดลอกทุกอย่างเป็น symlink ด้วยคำสั่งเดียวเท่านั้นคุณต้องใช้ cp -s เช่น @hlovdal answer, cp -rs /var/www/folder/ .คัดลอกไฟล์ย่อยทุกไฟล์เป็น symlink ไม่ใช่ln -s /var/www/folder/ .คนที่ทำซ้ำไฟล์ย่อยในคอมพิวเตอร์ของฉัน
baptx

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