Saya memiliki direktori yang berisi beberapa tautan simbolis:
user@host:include$ find .. -type l -ls
4737414 0 lrwxrwxrwx 1 user group 13 Dec 9 13:47 ../k0607-lsi6/camac -> ../../include
4737415 0 lrwxrwxrwx 1 user group 14 Dec 9 13:49 ../k0607-lsi6/linux -> ../../../linux
4737417 0 lrwxrwxrwx 1 user group 12 Dec 9 13:57 ../k0607-lsi6/dfc -> ../../../dfc
4737419 0 lrwxrwxrwx 1 user group 17 Dec 9 13:57 ../k0607-lsi6/dfcommon -> ../../../dfcommon
4737420 0 lrwxrwxrwx 1 user group 19 Dec 9 13:57 ../k0607-lsi6/dfcommonxx -> ../../../dfcommonxx
4737421 0 lrwxrwxrwx 1 user group 17 Dec 9 13:57 ../k0607-lsi6/dfcompat -> ../../../dfcompat
Saya perlu menyalinnya ke direktori saat ini. Tautan yang dihasilkan harus independen dari prototipe mereka dan mengarah langsung ke objek target mereka.
cp -s
membuat tautan ke tautan yang bukan perilaku yang pantas.cp -s -L
menolak untuk menyalin tautan ke direktoricp -s -L -r
menolak untuk menyalin tautan relatif ke direktori yang tidak berfungsi
Apa yang harus saya lakukan?
linux
command-line
symbolic-link
cp
Basilevs
sumber
sumber
cp -d
membuat pekerjaan di sisiku.cp -R
pada macJawaban:
Dari halaman manual:
Secara pribadi, saya menggunakan
cp -av
sebagian besar salinan berat saya. Dengan begitu, saya bisa menjaga semuanya - bahkan secara rekursif - dan melihat hasilnya. Tentu saja, itu hanya preferensi pribadi.Mengapa opsi Anda yang lain tidak melakukan apa yang Anda harapkan,
-s
jadikan tautan alih - alih menyalin dan-L
ikuti tautan di sumber untuk menemukan file yang akan disalin daripada menyalin tautan itu sendiri.sumber
-R
, karena jika tidak cp akan melewatkan direktori dan symlink ke direktori.cp -a
-a
opsi. Heh, aku sudah sering mencari opsi dicp
halaman manual, namun aku pasti selalu membaca skim yang satu ini. Saya sampai sekarang telah menggunakan-dpr
, tetapi-a
mencakup semua itu, ditambah pelestarian beberapa atribut lainnya. Jika saya membutuhkan atribut-atribut lain ini, saya mungkin akan mencari--preserve
opsi itu lagi dan menggunakan-dr --preserve=all
, itulah tepatnya-a
! Setidaknya saya tahu sekarang --a
sempurna dan inilah yang akan saya gunakan mulai sekarang.--preserve=links
itu tidak cukup. Masih dikatakancp: omitting directory
. Tapi-av
berhasil.Seperti yang dikatakan halaman manual, gunakan
-P
.sumber
-P
tidak bekerja pada direktori jadi saya menggunakancp -a
cp -P
tidak seperti jawaban terpilih teratas oleh @ainosnous bekerja untuk saya. Terima kasih!Jika tautan berisi jalur relatif, maka, menyalin tautan tidak akan menyesuaikan jalur relatif. Gunakan
readlink
, dengan saklar-f
untuk mengikuti secara rekursif, untuk mendapatkan jalur absolut tautan. Sebagai contoh:Jika melestarikan path relatif adalah apa yang Anda inginkan, daripada pilihan
-P
daricp
, seperti yang dikatakan oleh Ignacio Vazquez-Abrams, adalah apa yang Anda butuhkan.sumber
/usr/share/dict/words -> /etc/dictionaries-common/words -> /usr/share/dict/british-english
yang menentukan kamus pilihan. Jika Anda secara rekursif mereferensikan rantai ini, symlink yang dihasilkan akan mengabaikan perubahan apa pun di masa depan untuk preferensi ini.Seperti beberapa yang berkomentar:
bekerja dengan baik.
Dari pria itu:
sumber
Saya menggunakan yang berikut ini untuk menduplikasi direktori yang sangat besar. Semua tautan simbolis dilestarikan, salinannya dilakukan secara rekursif dan saya dapat memiliki beberapa umpan balik visual dari proses:
sumber
Sebagian besar waktu, ketika saya perlu menyalin banyak tautan simbolis, saya sebenarnya mencoba untuk mirror pohon direktori. Jadi saya ingin symlink dan yang lainnya.
Ini berlebihan untuk menyalin hanya beberapa symlink, tetapi jika Anda benar-benar mencoba menyalin seluruh pohon, ini bisa sangat berguna:
Gunakan tar .
tar tidak menyelesaikan symlink secara default, jadi symlink di salinan mirror akan menunjuk ke lokasi yang sama dengan yang di pohon asli.
Trik ini menggunakan subkulit untuk mendapatkan perintah tar ke posisi di root direktori yang akan dicerminkan; Anda dapat mengabaikan salah satunya (bersama dengan perintah cd yang terkait ) jika Anda sudah berada di direktori src atau dest :
Sekali lagi, ini tidak sesuai untuk setiap kali Anda ingin menyalin tautan simbolis, tetapi ini adalah potongan yang sangat berguna untuk diketahui.
sumber
Coba: cp -pr tujuan symlink
OS - Centos 5 (Linux)
sumber
Di Ubuntu saat menyalin tautan dan file di direktori:
sumber
cp -d
adalah singkatan untuk inicp -a
dancp --preserve=links
melakukan lebih dari pertanyaan yang diajukan. Seperti yang saya pahami, ini adalah jawaban yang benar untuk siapa pun yang menggunakancp
, meskipun hanya dengan file (tanpa direktori) seperti dalam pertanyaan, tidak--no-dereference
akan berpengaruh.Gunakan
-P
opsi, seperti yang ditulis Ignacio Vazquez-Abrams di atas . Apa yang tidak dia sebutkan adalah-P
tidak berpengaruh tanpa-R
. Jadi, Anda setidaknya perlucp -RP
.(Situs belum mengizinkan saya untuk berkomentar, jadi saya mengirim jawaban yang terpisah.)
sumber
cp -s dan cp -L adalah perintah khusus. Untuk kebutuhan Anda, jangan gunakan.
misalnya Menyalin direktori DIR yang berisi a dan tautan simbolik b yang menunjuk ke a.
Yang Anda butuhkan adalah N / a (= DIR / a), dan N / b -> ../ N / a; jadi salin saja tanpa dereferencing, menggunakan opsi cp -P. Saya percaya ini juga default untuk cp.
lihat
man cp
ataucp --help
untuk lebih banyak opsi.sumber