Como criar vários links em vários diretórios ao mesmo tempo? [RESOLVIDO]

1. Como criar vários links em vários diretórios ao mesmo tempo? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/11/2015 - 14:09h

Ola galerinha.

O que estou tentando fazer é criar vários links entre arquivos em vários diretórios. Vamos ao exemplo, eu tenho três listas de parâmetros:

Lista 1: Alvos
gnome-glchess
gnome-glines
gnome-gnect
gnome-swell-foop

Lista 2: Nome-dos-links
gnome-chess
five-or-more
four-in-a-row
swell-foop

Lista 3: Diretórios
/usr/share/icons/Faenza/apps/16
/usr/share/icons/Faenza/apps/22
/usr/share/icons/Faenza/apps/24
/usr/share/icons/Faenza/apps/32
/usr/share/icons/Faenza/apps/48
/usr/share/icons/Faenza/apps/64
/usr/share/icons/Faenza/apps/96
/usr/share/icons/Faenza/apps/scalable


Lembrando que a extensão dos arquivos é .png com exceção do diretório "scalable" que é .svg.

Como fazer para colocar estes parâmetros em "loop" para que todos os links sejam criados em cada diretório?
Pensei em usar o "for i in ... ; do ... ; done", mas não tenho muita prática com isso. Alguém teria uma ideia?


  


2. MELHOR RESPOSTA

thinomar
thinomar

(usa Linux Mint)

Enviado em 03/11/2015 - 14:34h

Você pode fazer salvando os diretórios em um array:
#!/bin/bash

diretorios=("diretorio_1" \
"diretorio_2" \
"diretorio_3" \
"diretorio_N")

for dir in ${diretorios[@]}
do
ln -s /caminho/do/arquivo/original $dir/atalho
done

Ou salvando os diretorios em um arquivo
#!/bin/bash

for dir in `cat /caminho/arquivo/com/diretorios`
do
ln -s /caminho/do/arquivo/original $dir/atalho
done

Se precisar trabalhar com mais de um arquivo, você pode colocar laços dentro de laços.
--
-I've been talking to the main computer
-And...?
-It hates me

3. Re: Como criar vários links em vários diretórios ao mesmo tempo? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/11/2015 - 23:28h

Fiz da seguinte maneira:

#!/bin/bash

# Função para criação dos atalhos em cada diretório
function AtalhoPNG() {
ln -s gnome-glchess.png gnome-chess.png
ln -s gnome-glines.png five-or-more.png
ln -s gnome-gnect.png four-in-a-row.png
ln -s gnome-swell-foop.png swell-foop.png
}

function AtalhoSVG() {
ln -s gnome-glchess.svg gnome-chess.svg
ln -s gnome-glines.svg five-or-more.svg
ln -s gnome-gnect.svg four-in-a-row.svg
ln -s gnome-swell-foop.svg swell-foop.svg
}

DIRETORIOS=("/usr/share/icons/Faenza/apps/16" \
"/usr/share/icons/Faenza/apps/22" \
"/usr/share/icons/Faenza/apps/24" \
"/usr/share/icons/Faenza/apps/32" \
"/usr/share/icons/Faenza/apps/48" \
"/usr/share/icons/Faenza/apps/64" \
"/usr/share/icons/Faenza/apps/96")

for dir in ${DIRETORIOS[@]}
do
cd $dir
AtalhoPNG
done

cd /usr/share/icons/Faenza/apps/scalable
AtalhoSVG


Funcionou, mas não ficou um código lá muito "elegante" não... hehehe!
Se alguém tiver uma sugestão melhor para deixar o script mais prático, caso alguém quisesse usar para outros propósitos, sinta-se a vontade.

Valeu!!!


4. Re: Como criar vários links em vários diretórios ao mesmo tempo? [RESOLVIDO]

thinomar
thinomar

(usa Linux Mint)

Enviado em 04/11/2015 - 14:03h

Nem cheguei a testar, mas vê se dá certo e adapta as suas necessidades. Só faz backup dos arquivos que vão ser manipulados para não perde-los no caso de dar errado.
Você precisa jogar o nome dos arquivos originais na lista1.txt e o nome novo dos arquivos em lista2.txt, mas não quiser trabalhar com arquivos, dá pra adaptar pra array.
#!/bin/bash
# By: Thiago Martins

# lista1.txt precisa ter a mesma qntd de linhas que lista2.txt
LISTA1=/caminho/da/lista1.txt
LISTA2=/caminho/da/lista2.txt

# Verificando numero de linhas dos arquivos
if [ `awk 'END {print NR}' $LISTA1` -ne `awk 'END {print NR}' $LISTA2` ]
then
echo "Os arquivos precisam ter a mesma quantidade de linhas!"
exit
fi

### PARA DIRETORIOS EM ARQUIVO ###
DIRETORIOS=/caminho/do/diretorios.txt
for dir in `cat $DIRETORIOS`
do
# Concatena linhas das listas em foreach
for arq in `paste -d ',' $LISTA1 $LISTA2`
do
# Verifica se e o diretorio do SVG ou PNG
if [ $dir -eq "/usr/share/icons/Faenza/apps/scalable" ]
then
ln -s $dir/`awk -F',' '{print $1}'`.svg $dir/`awk -F',' '{print $2}'`.svg
else
ln -s $dir/`awk -F',' '{print $1}'`.png $dir/`awk -F',' '{print $2}'`.png
fi
done
done

### PARA DIRETORIOS EM ARRAY ###
#DIRETORIOS=("/usr/share/icons/Faenza/apps/16" \
#"/usr/share/icons/Faenza/apps/22" \
#"/usr/share/icons/Faenza/apps/24" \
#"/usr/share/icons/Faenza/apps/32" \
#"/usr/share/icons/Faenza/apps/48" \
#"/usr/share/icons/Faenza/apps/64" \
#"/usr/share/icons/Faenza/apps/96")
#
#for dir in ${DIRETORIOS[@]}
#do
# # Concatena linhas das listas em foreach
# for arq in `paste -d ',' $LISTA1 $LISTA2`
# do
# # Verifica se e o diretorio do SVG ou PNG
# if [ $dir -eq "/usr/share/icons/Faenza/apps/scalable" ]
# then
# ln -s $dir/`awk -F',' '{print $1}'`.svg $dir/`awk -F',' '{print $2}'`.svg
# else
# ln -s $dir/`awk -F',' '{print $1}'`.png $dir/`awk -F',' '{print $2}'`.png
# fi
# done
#done

--
-I've been talking to the main computer
-And...?
-It hates me


5. Re: Como criar vários links em vários diretórios ao mesmo tempo? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/11/2015 - 15:20h

Obrigado Thinomar, ficou bem melhor!!!
:D







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts