/ / Tentando criar uma string no awk, reclama de divisão com zero - bash, unix, awk, terminal

Tentando criar uma string no awk, reclama de divisão com zero - bash, unix, awk, terminal

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 № 1

O 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 corda ln -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}"