Utilice `ln` para crear un directorio faltante

Utilice `ln` para crear un directorio faltante

Así que estoy escribiendo un pequeño administrador de paquetes y un problema con el que me he encontrado es crear enlaces simbólicos a archivos.

Instala el paquete en /usr/pkg/name-versiony luego lee un archivo para determinar qué enlaces simbólicos crear. Lo estoy usando lnpara hacer los enlaces y me encontré con un problema al intentar instalar los encabezados de la API de Linux. Necesito vincular los archivos de encabezado en sí, no las carpetas que los contienen (por lo que si 2 paquetes necesitan colocar archivos en el mismo subdirectorio de inclusión, pueden hacerlo sin arruinar un paquete).

Resolví ese problema, pero lnsimplemente se produce un error si la ruta está incompleta, lo cual es molesto porque esos directorios no deberían existir hasta que se instale el paquete.

¿Existe una opción lnque creará los directorios que faltan o tendré que utilizar algún script bash complicado?

Respuesta1

No hay ninguna bandera para hacer esto ln. Crear directorios no es su trabajo.

mkdir -p foo/bar/quxcreará foo, foo/bary foo/bar/quxsegún sea necesario. Así que llame mkdir -pprimero a todos menos al último componente de la ruta.

Parece que estás reinventando la rueda. Estibar, un administrador de paquetes simple que fusiona jerarquías de directorios creando directorios con la profundidad requerida con enlaces simbólicos a componentes de diferentes paquetes en su interior. O quizásXStow, que es como Stow pero con más posibilidades de personalización.

Respuesta2

No necesitarás un script bash complicado, sino una simple frase. mkdir --parentsse encargará de todo, ni siquiera imprimirá un error si la estructura del directorio ya existe.

Solo tenga cuidado con la forma en que trata estos directorios al eliminarlos, para no dañar otros paquetes.

Además, como lo estás escribiendo en bash, puedes echarle un vistazo abrujería(enchufe descarado). Quizás sería más sencillo modificarlo, ya que es maduro y flexible.

Respuesta3

Quizás tarpodría ayudar a preparar el archivo con los enlaces:

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

Y luego crear los enlaces donde sea necesario:

tar xvf links.tar

información relacionada