Je voudrais créer des liens symboliques ( ln -s
) vers tous les fichiers (ou une classe de fichiers, par exemple se terminant par .bar
) dans un certain répertoire. Dis que je suis dans le cwd et le type ls ../source/*.bar
me donne
foo.bar
baz.bar
comment puis-je passer la liste des paramètres pour ln -s
qu'il résout finalement
ln -s ../source/foo.bar
ln -s ../source/baz.bar
Bien sûr, je sais que je peux écrire un script bash, mais il devrait y avoir quelque chose de plus simple à impliquer xargs
, car cela semble être une tâche courante - du moins pour moi.
linux
bash
symbolic-link
dastrobu
la source
la source
*.bar
. Cela créera un lien avec le nom"*.bar"
, ce qui n'est pas ce que vous voulez.shopt -s failglob
; voir par exemple unix.stackexchange.com/a/216227/33390 (l'équivalent dans zsh estsetopt nomatch
, qui est activé par défaut)Utilisation
find
N'oubliez pas non plus d'utiliser des chemins d'accès complets (si possible) avec des liens symboliques.
la source
find $certainDir -name "*.bar" -exec ln -s {} \;
? Et pourquoi devrais-je utiliser des chemins d'accès complets? Je trouve assez pratique de savoir que les liens restent intacts lorsque je déplace une arborescence de répertoires autour de laquelle ont des liens internes.Vous pouvez essayer récursivement soit en utilisant globstar (bash / zsh défini par:)
shopt -s globstar
:Remarque: ajouté
-v
pour verbeux.Ou si la liste est trop longue, utilisez l'
find
utilitaire:Cela créera des liens
dest/
ou le changera.
pour le dossier actuel.la source
cp
avec-s
option peut créer un lien logiciel (ou-l
pour un lien matériel).Du répertoire courant peut être utilisé comme ceci:
Dans votre cas, ce sera comme ceci:
la source