Eu estou tentando criar um script para automagicamenteCriar links simbólicos para todas as minhas pastas em uma pasta específica, isso deve ser difícil de fazer, mas por alguma razão minhas variáveis são passadas realmente estranho dentro deste script oneline.
#!/bin/bash
# ----------------------------------
# --------- TotalKrill -------------
# ----------------------------------
# Script to create symlinks to my clouded folder in my home directory by listing all folders/files in the cloudfolder and then creating symlinks in destfolder
#
myname=`whoami`
searchfolderdir=/home/$myname/
searchfoldername=ownCloud
destfolder=~/
Target=$searchfolderdir$searchfoldername/
ls -1 $searchfolderdir$searchfoldername | awk {"print ln -fs $Target$0 $destfolder/$0"} #|sh
Mas eu recebo uma saída: awk: cmd. line: 1: (FILENAME = - FNR = 1) fatal: divisão por zero tentativa
Alguém pode me indicar uma abordagem melhor ou me dizer como consertar esse script? o "| sh" está comentado para que eu possa obter uma linha correta antes de executar.
Em uma caixa do Ubuntu 12,10 x64 tentando fazê-lo funcionar.
Respostas:
1 para resposta № 1O que você precisa é (sintaticamente pelo menos):
awk -v t="$Target" -v d="$desfolder" "{print "ln -fs",t$0,d"/",$0}"
Notas:
Se você não quer o operador de divisão, mas o literal char
/
você precisa incluí-lo entre aspas duplas.Strings precisa colocar entre aspas duplas em
awk
como a cordaln -fs
Você precisa passar variáveis shell para awk usando o
-v
opção.Você deve sempre citar suas variáveis.
As chaves que fecham o bloco precisam estar dentro das aspas simples.
Adicionando algumas outras correções como usar find
para retornar apenas diretórios:
#!/bin/bash
myname=$(whoami)
dir="/home/$myname/"
folder="myCloud"
destination="~/"
target="${dir}${folder}"
find "${target}" -maxdepth 1 -type d -print |
awk -v t="$target" -v d="$destination" "{print "ln -fs",t$0"/",d}"