Vinculando vários arquivos

2

Em bash , digamos que eu queira vincular alguns arquivos, mas não todos, de um diretório, por exemplo,

ln -s /dir/file1 /dir/file2 ... /other/dir

mas o formato dos nomes dos arquivos não segue uma regra simples, então não podemos usar algo como

ln -s /dir/file* /target/dir.

Existe alguma maneira de não repetir /dir , algo como:

/dir/{file1 file2 ...} = /dir/file1 /dir/file2 ...

para que possamos fazer algo como:

ln -s /dir/{file1 file2 ...} /target/dir
    
por thedoctar 09.03.2014 / 08:51

2 respostas

8

Sim, a sintaxe é bem parecida com o que você queria fazer. Dizendo:

ln -s /dir/{file1,file2,foo,bar} /target/dir

vincularia os arquivos file1 , file2 , foo , bar de /dir/ a /target/dir/ .

A sintaxe acima é chamada de expansão de chaves .

(A expansão de brace faz com que /dir/{file1,file2,foo,bar} seja expandido para /dir/file1 /dir/file2 /dir/foo /dir/bar .)

    
por 09.03.2014 / 08:57
2

Para regras complexas, tente:

cd dir
find . -name 'file1*' -or -name 'file2*' -or ... -exec ln -s '{}' '/other/dir/{}' ';'

Observe que todos os tipos '*', '{}' e ';' deve ser citado para impedir a expansão do shell e passagem bruta para encontrar!

Para enumerações simples, a expansão do shell é {aa,bb,cc} suficiente.

    
por 09.03.2014 / 09:49