Gunakan `ln` untuk membuat direktori yang hilang

10

Jadi saya menulis manajer paket kecil, dan masalah yang saya hadapi adalah membuat tautan simbolis ke file.

Itu menginstal paket untuk /usr/pkg/name-version, dan kemudian membaca file untuk menentukan apa yang membuat tautan simbolis. Saya menggunakan lnuntuk membuat tautan, dan saya mengalami masalah ketika mencoba menginstal header Linux API. Saya perlu menautkan file header itu sendiri, bukan folder yang berisi mereka (jadi jika 2 paket perlu meletakkan file dalam subdirektori yang sama dengan menyertakan mereka dapat tanpa mengacaukan satu paket).

Masalah itu saya selesaikan, tetapi lnhanya kesalahan jika jalurnya tidak lengkap, yang menjengkelkan karena direktori-direktori itu seharusnya tidak ada sampai paket diinstal.

Apakah ada bendera untuk lnitu akan membuat direktori yang hilang, atau apakah saya harus pergi dengan beberapa skrip bash yang berbelit-belit?

Chris
sumber
1
Saya mungkin kehilangan sesuatu yang jelas, tetapi mengapa Anda tidak menggunakan mkdiruntuk ... membuat direktori?
jw013
Anda mungkin juga ingin check out lndir.
pagi

Jawaban:

3

Anda tidak akan memerlukan skrip bash yang berbelit-belit, tetapi satu baris sederhana. mkdir --parentsakan mengurus semuanya, bahkan tidak mencetak kesalahan jika struktur direktori sudah ada.

Berhati-hatilah dengan cara Anda memperlakukan direktori ini saat dihapus, sehingga Anda tidak merusak paket lain.

Juga, karena Anda sedang memasukkannya bash, Anda dapat melihat sihir (steker tak tahu malu). Mungkin akan lebih mudah untuk hanya memodifikasi itu, karena sudah matang dan fleksibel.

lynxlynxlynx
sumber
Woops, saya lupa menyebutkan bahwa saya menulisnya di c ++, dan menghubungkan bash dengan system () memanggil karena lebih mudah. Inilah yang akhirnya saya lakukan, terima kasih.
Chris
@ Chris: system()tidak lebih mudah, sangat sulit untuk menghindari argumen baris perintah dengan benar system(). Paling tidak Anda harus menggunakan posix_spawn()atau fork()+exec*(), yang menerima argumen baris perintah sebagai array.
Lie Ryan
4

Tidak ada bendera untuk melakukan ini ln. Membuat direktori bukan tugasnya.

mkdir -p foo/bar/quxakan membuat foo, foo/bardan foo/bar/quxsesuai kebutuhan. Jadi panggil mkdir -psemua kecuali komponen path terakhir terlebih dahulu.

Sepertinya Anda menciptakan kembali roda Stow , manajer paket sederhana yang menggabungkan hierarki direktori dengan membuat direktori ke kedalaman yang diperlukan dengan tautan simbolis ke komponen paket yang berbeda di dalamnya. Atau mungkin XStow , yang seperti Stow tetapi dengan lebih banyak kemungkinan penyesuaian.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
0

Mungkin tarbisa membantu menyiapkan file dengan tautan:

find . -type l > links.txt
tar cpf links.tar --files-from links.txt

Dan kemudian untuk membuat tautan di mana dibutuhkan:

tar xvf links.tar
Vladimir Botka
sumber