Eu gostaria de criar links simbólicos ( ln -s
) para todos os arquivos (ou uma classe de arquivos, por exemplo, terminando com .bar
) em um determinado diretório. Diga que estou no cwd e tipo ls ../source/*.bar
me dá
foo.bar
baz.bar
como posso passar a lista de parâmetros para ln -s
que finalmente resolva
ln -s ../source/foo.bar
ln -s ../source/baz.bar
É claro que sei que posso escrever um script bash, mas deve haver algo mais simples que envolva xargs
isso, pois parece ser uma tarefa comum - pelo menos para mim.
linux
bash
symbolic-link
dastrobu
fonte
fonte
*.bar
. Ele criará um link com o nome"*.bar"
, que não é o que você deseja.shopt -s failglob
; ver, por exemplo unix.stackexchange.com/a/216227/33390 (O equivalente em zsh ésetopt nomatch
, que está ligado por padrão)Usar
find
Além disso, lembre-se de usar caminhos completos (sempre que possível) com links simbólicos.
fonte
find $certainDir -name "*.bar" -exec ln -s {} \;
? E por que devo usar caminhos completos? Acho conveniente saber que os links permanecem intactos quando movo uma árvore de diretórios pelo qual há alguns links internos.Você pode tentar recursivamente usando globstar (bash / zsh definido por:)
shopt -s globstar
:Nota: Adicionado
-v
para detalhado.Ou se a lista for muito longa, usando o
find
utilitário:Isso criará links
dest/
ou alterará.
para a pasta atual.fonte
cp
com a-s
opção pode criar links flexíveis (ou-l
para links físicos).Do diretório atual pode ser usado assim:
No seu caso, será assim:
fonte