Saya memiliki SUMBER folder yang berisi beberapa folder sub-level, masing-masing dengan file sendiri.
Saya ingin menyalin folder ini dalam folder SALINAN baru di mana saya perlu menyalin struktur direktori tetapi menyimpan file sebagai tautan simbolis ke file asli di SOURCE dan subfoldernya.
Jawaban:
Inilah solusinya pada Linux dan Cygwin yang tidak tertanam:
Perhatikan bahwa SOURCE harus menjadi jalur absolut dan memiliki garis miring. Jika Anda ingin memberikan jalur relatif, Anda dapat menggunakan
sumber
SOURCE
adalah jalur relatif maka saya pikir begitu. Cobalah dan jika ini tidak berhasil, saya sarankan Anda ingin mengajukan pertanyaan baru. Referensi yang satu ini dengan segala cara.Setidaknya ada 2 utilitas standar untuk membangun pohon direktori bayangan dari pohon yang ada, jadi tidak perlu menulis kode di sini.
Pertama ada
lndir(1)
darixutils-dev
paket. Ini menggunakan symlink ke file. Dari halaman manual:Alternatif yang mungkin lebih baik adalah dengan menggunakan
cp
opsi yang tepat seperti yang disarankan oleh jawaban yang diterima. Saya hanya akan memberikan beberapa detail yang lebih bermanfaat:Jika Anda tidak peduli tentang mempertahankan semua atribut (kepemilikan / izin, waktu) ganti
a
opsi (setara dengan-dr --preserve=all
) denganr
(hanya rekursif):sumber
lndir
juga tersedia sebagai skrip shell di sini jika tidak diinstal: opensource.apple.com/source/X11/X11-0.46.4/lndir.sh?txtAnda dapat mencoba beberapa perintah find seperti ini:
sumber
Sesuatu seperti ini akan melakukan apa yang Anda butuhkan.
Direktori dibuat di pohon COPY target. Yang lainnya disinkronkan kembali ke jalur absolut dalam pohon SUMBER. Pastikan bahwa SUMBER dan SALINAN ditentukan sebagai jalur absolut (dimulai dengan
/
).Jika Anda memiliki pohon besar untuk disalin dan Anda ingin laporan kemajuan per-direktori, Anda bisa menambahkan
echo "$ITEM" >&2;
sebelummkdir
perintah.(Saya melihat
cp
dancpio
tetapi sepertinya tidak ada pilihan untuk menghubungkan ke sumber dengan tautan simbolik.)sumber
{ mkdir -p "$COPY/$ITEM"; continue; }
ksh
skrip ... tetapi sepertinya itu perlubash
juga. MemperbaikiJika tidak ada dir kosong di SOURCE yang perlu disalin
sumber
cp
tetap menganggap GNU , mengapa tidakcp -as
?Saya akan mulai dengan memecah perl:
File::Find
adalah modul yang berguna yang memungkinkan Anda untuk menjalankan subrutin tertentu pada file apa pun dalam pohon direktori. Dalam hal ini, sub memeriksa apakah itu direktori - dan jika itu, apakahmkdir
file atau - dalam hal ini apakah itu symlink.sumber
Sepertinya Anda mencari sesuatu seperti alat
rsnapshot
; itu membuat salinan direktori arbitrer dan menggunakan hardlink jika memungkinkan. (Lihat halaman manual untuk melihat apakah itu cocok.)sumber