Crie muitos Symlinks com pwd e expressões regulares e espaço no caminho

0

Estou tentando criar um script para manter os arquivos com a mesma extensão em uma pasta separada do restante. Em particular, eu quero um script que, executado em uma pasta, crie links de todos os arquivos .tex e coloque-os em uma subpasta "sources".

Eu sei que ln lida bem com expressões regulares e $PWD ou $(pwd) retorna o caminho para a pasta atual. Então eu tentei executar

ln -s $PWD/*.tex ./sources/

na minha pasta, mas logo percebi que no meu caminho havia uma pasta com espaços, que ln lê como arquivos múltiplos. Então eu tentei com

ln -s '$PWD'/*.tex ./sources/

e

ln -s '$PWD/*.tex' ./sources/

mas em ambos os casos, o script produz um único arquivo chamado *.tex na minha pasta sources . Após algum post, tentei modificar os espaços no caminho como estes

ln -s $(printf "%q\n" "$PWD")/*.tex sources/

ln -s '$(printf "%q\n" "$PWD")'/*.tex sources/

ln -s '$(printf "%q\n" "$PWD")/*.tex' sources/

mas a saída foi a mesma (com a diferença de um caractere adicional \ ).

Ajuda?

    
por Exodd 02.08.2017 / 16:32

1 resposta

0

Sua primeira tentativa deve funcionar. Não é? O que faz em vez disso?

* substitui todos os nomes de arquivos correspondentes, mas não executa a divisão em espaços internos posteriormente.

"Eu sei que lida bem com expressões regulares" - isso está errado. Primeiro, são os padrões de shell que você vê aqui, não expressões regulares. Segundo, não é ln lidando com eles, mas com seu shell (normalmente bash ) antes de lançar ln ou qualquer outro comando.

    
por 02.08.2017 / 16:40