como fazer softlink para um monte de arquivos em um comando shell

1

Estou sob o Linux e uso o bash como meu shell de login. Eu preciso fazer softlink para um monte de arquivos. Os arquivos Thoes são listados em um arquivo de texto, digamos file_list.txt. Cada linha em file_list.txt é apenas um caminho completo de um arquivo de destino que precisa ser vinculado. Embora eu não saiba exatamente como, eu acredito que há uma maneira de combinar "cat" "" e "ln -s" juntos para fazer o trabalho em um comando shell. Então, precisa da sua ajuda.

    
por HaiYuan Zhang 07.02.2010 / 23:48

3 respostas

1

Se você deseja os nomes no diretório atual (ou em qualquer diretório), e se os nomes no arquivo são todos nomes absolutos, ou se os nomes relativos estão corretos em relação ao diretório de destino, então:

ln -s $(<file_list.txt) .

Se você preferir usar "cat", então:

ln -s $(cat file_list.txt) .

É evidente que estou usando o diretório atual como o destino.

    
por 08.02.2010 / 04:26
2

Você não diz o que deseja vincular.

Use um loop while sem cat . Se houver espaços nos nomes de arquivos, esse método tratará disso.

while read -r line; do ln -s "$line" target; done < file_list.txt

Você terá que fornecer o caminho para derivar o nome do alvo, já que você não o especificou na sua pergunta.

    
por 08.02.2010 / 00:08
2

Considere algo como (não testado):

for targ in $(cat file_list);
do
   tfile=$(basename $targ)
   ln -s $targ $tfile
done

Observe que basename removerá qualquer extensão de arquivo, como nomenclatura (por exemplo, ".exe" ou qualquer outra coisa). Isso pode ser corrigido, mas é uma dor. Você pode ter a faixa de nome base qualquer extensão de nome de arquivo, se desejar (use o -s flag).

Você pode compactar isso em uma única linha como:

$ for targ in $(cat file_list); do tfile=$(basename $targ); ln -s $targ $tfile; done
    
por 07.02.2010 / 23:54

Tags