Como criar links simbólicos para todos os arquivos (classe de arquivos) em um diretório?

Como criar links simbólicos para todos os arquivos (classe de arquivos) em um diretório?

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 digite ls ../source/*.barme dá

foo.bar
baz.bar

como posso passar a lista de parâmetros para ln -sque ela 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, xargspois parece ser uma tarefa comum - pelo menos para mim.

Responder1

lnaceita vários argumentos, mas não se esqueça de fornecer um diretório de destino nesse caso.

Então, no seu exemplo .é o diretório de destino, então deve ser tão fácil quanto

ln -s ../source/*.bar .

De man ln; o comando acima usa a 3ª forma:

ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
ln [OPTION]... TARGET                  (2nd form)
ln [OPTION]... TARGET... DIRECTORY     (3rd form)
ln [OPTION]... -t DIRECTORY TARGET...  (4th form)
  • No 1º formulário, crie um link para TARGET com o nome LINK_NAME.
  • Na 2ª forma, crie um link para TARGET no diretório atual.
  • Nas 3ª e 4ª formas, crie links para cada TARGET no DIRETÓRIO.

Responder2

Você pode tentar recursivamente usando globstar (bash/zsh definido por shopt -s globstar:):

ls -vs ../**/*.bar .

Nota: Adicionado -vpara verboso.

Ou se a lista for muito longa, use findo utilitário:

find .. -name \*.bar -exec ln -vs "{}" dest/ ';'

Isso criará links dest/ou alterará .para a pasta atual.

Responder3

Usarfind

certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;

Além disso, lembre-se de usarcaminhos completos(quando possível) com links simbólicos.

Responder4

cpcom -sa opção pode criar links virtuais (ou -lpara links físicos).

Do diretório atual pode ser usado assim:

$ cp -s ../path/with/scripts/* .

No seu caso será assim:

$ cp -s ../source/*.bar .

informação relacionada