Використовуйте `ln`, щоб створити відсутні каталог


10

Тому я пишу невеликий менеджер пакунків, і проблема, з якою я зіткнулася, - це створення символічних посилань на файли.

Він встановлює пакет на /usr/pkg/name-version, а потім зчитує файл, щоб визначити, які символічні посилання зробити. Я використовую lnдля створення посилань, і у мене виникли проблеми при спробі встановити заголовки API API. Мені потрібно зв’язати самі файли заголовків, а не папки, що містять їх (тому, якщо 2 пакети потрібно помістити файли в один підкаталог включення, вони можуть не вкручуючи один пакет).

Цю проблему я вирішив, але lnпросто помиляюсь, якщо шлях є неповним, що дратує, оскільки ці каталоги не повинні існувати до встановлення пакета.

Чи є прапор, lnякий створить якісь каталоги, які відсутні, або мені доведеться перейти з певним викривленим скриптом bash?


1
Можливо, я пропускаю щось очевидне, але чому ви не використовуєте mkdirдля створення каталогів?
jw013

Ви також можете перевірити lndir.
АМС

Відповіді:


3

Вам не знадобиться перекручений скрипт, а простий однолінійний. mkdir --parentsподбає про все, добре навіть не надрукувавши помилку, якщо структура каталогу вже існує.

Будьте обережні, як ви ставитесь до цих каталогів при видаленні, щоб не порушувати інші пакунки.

Крім того, оскільки ви це пишете bash, ви можете поглянути на чаклунство (безсоромну пробку). Можливо, було б простіше просто змінити це, оскільки воно є зрілим і гнучким.


Woops, я забув згадати, що я пишу це на c ++ і взаємодію bash з системними () дзвінками, тому що це простіше. Це те, що я закінчив, хоча, дякую.
Кріс

@Chris: system()не простіше, дуже важко уникнути належних аргументів командного рядка system(). По крайней мере, ви повинні використовувати posix_spawn()або fork()+exec*(), який приймає аргументи командного рядка як масиви.
Лі Лі Райан

4

Для цього немає прапора ln. Створення каталогів - не його робота.

mkdir -p foo/bar/quxстворить foo, foo/barі foo/bar/quxза потреби. Тому mkdir -pспочатку закликайте всіх, крім останнього компонента шляху.

Це здається, що ви винаходите колесо Stow , простий менеджер пакунків, який об'єднує ієрархії каталогів, створюючи каталоги на необхідну глибину із символічними посиланнями на компоненти різних пакетів всередині. Або, можливо, XStow , який схожий на Stow, але має більше можливостей налаштування.


0

Може tarдопомогти підготувати файл із посиланнями:

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

А потім створити посилання там, де потрібно:

tar xvf links.tar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.