Como executar um loop for no bash como uma string

1

Eu preciso executar um loop como uma string. Isso:

bash -c "for l in $(/bin/ls /dir1); do /bin/ln -sf $l /dir2/; done"

Dá um erro:

/bin/bash: -c: line 1: syntax error near unexpected token 'file1'
/bin/bash: -c: line 1: 'file1'

file1 é um daqueles que eu quero transformar em links simbólicos no primeiro diretório.

    
por user128083 11.08.2015 / 04:08

1 resposta

1

Não analise a saída ls: link .

Além disso, neste exemplo você não precisa de um loop, apenas deixe ln loop over args. cd para o diretório em que você está criando os links simbólicos, se você quiser que os alvos de links simbólicos funcionem quando você usa caminhos relativos do diretório atual para gerá-los.

(cd /dir1 && ln -sf -- * /dir2)      # make broken symlinks in dir2
(cd /dir2 && ln -sf -- ../dir1/* .)  # make relative symlinks
ln -sf /dir1/* /dir2/                # make absolute symlinks

(subshell) para evitar a alteração do diretório no shell atual.

Você também pode usar ln -sf -t /dir2 -- * , o que é útil com find -exec ln -t /dir {} + , porque find -exec {} + só pode colocar a lista no final da linha de comando.

O GNU cp também possui -l e -s opções para criar links físicos / simbólicos.

    
por 11.08.2015 / 22:03