Bagaimana cara saya menghubungkan setiap file dalam satu direktori ke direktori lain?

15

Jika saya memiliki sebuah direktori /foodengan beberapa file di dalamnya, bagaimana cara symlink setiap entri di /foodalam /bar/?

Misalnya, jika /foomemiliki file a, bdan c, saya ingin membuat tiga symlink:

  • /bar/a -> /foo/a
  • /bar/b -> /foo/b
  • /bar/c -> /foo/c
Steven
sumber
Apakah Anda yakin tidak hanya ingin symlink bar ke foo?
Rich Bradshaw
Aplikasi sebenarnya dari ini adalah saya menginstal sebuah program dan ingin memindahkan executable-nya ke folder standar di $ PATH saya daripada menambahkan yang diinstal ke path.
Steven
Sepertinya itu akan menjadi ide yang lebih baik untuk hanya mengkonfigurasinya --prefix=.
Hello71

Jawaban:

18

Anda dapat menggunakan (GNU) cpdengan --symbolic-linkopsi:

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$
hlovdal
sumber
Ini tampaknya menjadi solusinya. Luar biasa!
Steven
Ini sangat sempurna.
noraj
ada cara untuk membuat ini berlaku untuk direktori juga? Ketika saya menjalankan ini saya mendapat peringatan "cp: menghilangkan direktori './baz'"
solidau
15

Cobalah ini:

ln -s /foo/* /bar

Direktori sumber, sebagaimana ditentukan dalam pertanyaan, adalah /foo. Perhatikan bahwa itu harus ditentukan sepenuhnya (yaitu mulai dari direktori root), jadi contoh lain akan terlihat seperti ini:

ln -s /some/dir/with/baz/* destdir
ln -s /dir/to/link/from/* /dir/to/link/to
ln -s $PWD/stuff/* more/stuff
Dijeda sampai pemberitahuan lebih lanjut.
sumber
apakah ini bekerja?
ctrlc-root
@ root.ctrlc: Anda harus menentukan path lengkap dari sumber (yang ada /di jawaban asli saya). Saya akan menambahkan klarifikasi.
Dijeda sampai pemberitahuan lebih lanjut.
Saya pikir jika Anda ingin menyalin semuanya sebagai symlink dengan satu perintah saja, Anda harus menggunakan cp -s seperti @hlovdal answer, cp -rs /var/www/folder/ .menyalin setiap file subfolder sebagai symlink, tidak seperti ln -s /var/www/folder/ .siapa yang menduplikasi file subfolder di komputer saya.
baptx
2

Sesuatu seperti ini?

cd /foo
for f in *; do ln -s $PWD/$f /bar; done
garyjohn
sumber