Il semble qu'il devrait être simple de lier symboliquement un fichier à un nouveau fichier dans un sous-répertoire .... .... sans déplacer les sous-répertoires. Mais quelque chose à propos de la syntaxe laisse perplexe et va à l'encontre de ce à quoi je m'attendrais. Voici un cas de test:
mkdir temp
cd temp
mkdir deploy
echo "Contents of the build file!" > deploy/resources.build.php
ln -s deploy/resources.build.php deploy/resources.php
cat deploy/resources.php #bad symlink
Cela crée juste un lien symbolique cassé! J'exécute cela dans un script de configuration de l'environnement de construction, donc je veux éviter de changer le répertoire de travail actuel si possible.
ln -s deploy/resources.build.php resources.php
cat deploy/resources.php
Ne fonctionne pas non plus car il crée le lien symbolique dans le répertoire temporaire au lieu du sous-répertoire deploy.
cd deploy
ln -s resources.build.php resources.php
cd ..
Cela fonctionne, mais je préfère savoir comment le faire sans changer de répertoire.
Utiliser un chemin complet comme:
/home/whatever/src/project/temp/stuff/temp/deploy/resources.build.php
Fonctionne, mais est peu pratique et quelque peu impraticable, en particulier dans un environnement de génération où tous les éléments du projet peuvent être différents entre les générations, etc.
Comment puis-je créer un lien symbolique entre deux fichiers dans un sous-répertoire, sans entrer dans ce sous-répertoire et en sortir, et tout en donnant au nouveau fichier "alias" un nouveau nom?
Cela m'a confondu jusqu'à ce que je réalise qu'un lien symbolique est essentiellement un fichier de configuration. c'est-à-dire comment pourrais-je écrire ces données de chemin dans un simple fichier texte:
devient:
L'erreur que je (et probablement OP) faisais est de penser que ln a besoin de connaître le fichier qu'il cible. Ça m'est égal. Il suffit d'écrire des informations de chemin dans un fichier. C'est une commande ln parfaitement raisonnable :
Par conséquent:
produit un fichier simlink appelé
resources.php
dans le./deploy
dossier qui fait référence au fichierresources.build.php
dans le dossier./deploy/deploy/
.C'est peu probable ce que vous voulez et donne un mauvais lien (cassé). Il n'y a rien de mal avec le lien, si vous mettez ce fichier là, alors le lien fonctionne. Cependant, (comme l'ont souligné d'autres), ce que moi et le PO voulions était:
la source