Вопрос как разрешить все символические ссылки в каталоге?


Я пытаюсь сделать пакет debian из исходного кода, который не является моим. configure сценарий, предоставленный автором, содержит много символических ссылок в исходном каталоге. Они являются символами для всех заголовков в src подражать include subdir (чтобы makefile мог легко скопировать include каталог в случае установки пакета разработки). я использую debhelper скрипты для создания пакета.

я использую debhelper скрипты для создания пакета. Проблема заключается в использовании нового формата пакета debian (quilt 3.0 native), debuild отказывается добавлять изменения исходной директории, содержащей символические ссылки в final diff файл. Я получаю такие ошибки:

dpkg-source: error: cannot represent change to foo.h:
dpkg-source: error:   new version is symlink to /ba/foo/foo.h
dpkg-source: error:   old version is nonexistent

Я знаю о хорошем решении: измените скрипт configure, чтобы вообще не ссылаться на какой-либо заголовок. Он должен добавить цель для makefile установить devel пакет. Хотя скрипт configure имеет проблемы с авторским правом. Я не могу коснуться источника восходящего потока.

Я ищу скрипт bash для замены всех символических ссылок в каталоге с фактическими файлами, на которые они указывают. Например, если в каталоге d есть три файла a а также b а также c, которые они употребляли символические ссылки на ../../foo/bar/x, ../../foo/bar/z  ../../foo/bar/y, запуск желаемого скрипта (скажем, magic.sh), ./d как первый аргумент, следует

cp ../../foo/bar/x ./d/a
cp ../../foo/bar/y ./d/b
cp ../../foo/bar/z ./d/c

Я не могу найти способ узнать, к какому файлу относится символическая ссылка.


4
2017-09-18 17:52


происхождения




ответы:


использование readlink,

$ readlink /etc/alternatives/editor
/usr/bin/vim.basic

и оберните его в сценарий оболочки, прогуливаясь по символическим ссылкам в каталоге.

Вы можете найти символические ссылки, используя find:

$ find . -type l

Более полный пример:

#!/bin/bash

find . -maxdepth 1 -type l | while read LINE; do 
echo link: $LINE resolved: `readlink $LINE`
done

выходы

link: ./.remmina resolved: sparkleshare-homedir/remmina
link: ./project resolved: Documents/2011-2 Project/
link: ./.ssh resolved: sparkleshare-homedir/ssh

4
2017-09-18 17:57



pastebin.com/FNWQAsbm Надеюсь, эта работа для меня ... - sorush-r
Прекрасно работает ... спасибо :) - sorush-r
Обязательно выполняйте правильное экранирование, хотя при выполнении операций. Символьная ссылка, разрешающая bla / bla может расширяться до этого: rm -rf bla / bla, Не уверен, что ваш пример предотвращает это, у меня нет. - gertvdijk