Eksik bir dizin oluşturmak için `ln` tuşunu kullanın


10

Bu yüzden küçük bir paket yöneticisi yazıyorum ve karşılaştığım bir sorun, dosyalara sembolik bağlantılar yapmak.

Paketi yükler /usr/pkg/name-versionve ardından hangi sembolik bağlantıların yapılacağını belirlemek için bir dosyayı okur. lnBağlantıları yapmak için kullanıyorum ve Linux API üstbilgilerini yüklemeye çalışırken bir sorunla karşılaşıyorum. Ben üstbilgi dosyaları kendilerini, onları içeren klasörleri bağlamak gerekir (böylece 2 paket bir paket kadar vida olmadan dahil aynı alt dizine dosyaları koymak gerekir).

Bu sorunu çözdüm, ancak lnyol tamamlanmadığında hata veriyor, bu sinir bozucu çünkü paket yüklenene kadar bu dizinler mevcut olmamalı.

lnBunun için eksik herhangi bir dizin oluşturacak bir bayrak var mı , yoksa bazı kıvrımlı bash betiği ile gitmek zorunda kalacak mıyım?


1
Açık bir şeyi kaçırıyor olabilirim, ama neden mkdirdizin yapmak için kullanmıyorsun ?
jw013

Ayrıca kontrol etmek isteyebilirsiniz lndir.
ams

Yanıtlar:


3

Kıvrımlı bir bash betiğine ihtiyacınız olmayacak, basit bir satırlık. mkdir --parentsher şeyle ilgilenecek, hatta dizin yapısı zaten varsa bir hata bile yazdırmayacak.

Bu dizinleri kaldırma sırasında nasıl ele aldığınıza dikkat edin, böylece diğer paketleri kırmazsınız.

Ayrıca, yazdığınız bashiçin büyücülüğe (utanmaz fiş) bir göz atabilirsiniz . Belki de olgun ve esnek olduğu için bunu değiştirmek daha kolay olurdu.


Woops, c ++ ile yazdığımı ve system () çağrıları ile bash'ı aradığımı belirtmeyi unuttum çünkü daha kolay. Yine de bunu yaptım, teşekkürler.
Chris

@Chris: system()daha kolay değil, komut satırı argümanlarından düzgün bir şekilde kaçmak çok zor system(). En azından komut satırı argümanlarını diziler olarak kabul eden posix_spawn()veya kullanmalısınız fork()+exec*().
Yalan Ryan

4

Bunu yapmak için bayrak yok ln. Dizin oluşturmak onun işi değildir.

mkdir -p foo/bar/quxyaratacak foo, foo/barve foo/bar/quxgerektiği gibi. Bu yüzden mkdir -pönce son yol bileşeni hariç hepsini çağırın .

İçerideki farklı paketlerin bileşenlerine sembolik bağlantılar ile gerekli derinlikte dizinler oluşturarak dizin hiyerarşilerini birleştiren basit bir paket yöneticisi olan Stow tekerleğini yeniden keşfediyorsunuz . Ya da belki Stow gibi ama daha fazla özelleştirme olasılığı olan XStow .


0

Belki tardosyayı linklerle hazırlamaya yardımcı olabilir:

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

Ve sonra gerekli yerlerde bağlantılar oluşturmak için:

tar xvf links.tar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.