0

特定のフォルダーの下にあるすべてのフォルダーへのシンボリックリンクを自動的に作成するスクリプトを作成しようとしています。これは難しいことではありませんが、何らかの理由で、この 1 行のスクリプト内で変数が非常に奇妙に渡されます。

#!/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 

しかし、出力が得られます: awk: cmd. line:1: (FILENAME=- FNR=1) 致命的: ゼロ除算を試みました

誰かがより良いアプローチを教えてくれますか、またはこのスクリプトを修正する方法を教えてください。「| sh」はコメントアウトされているため、実行する前に正しい行を取得できます。

ubuntu 12.10 x64ボックスで動作させようとしています。

4

1 に答える 1

1

必要なのは(少なくとも構文的に)

awk -v t="$Target" -v d="$desfolder" '{print "ln -fs",t$0,d"/",$0}' 

ノート:

  • 除算演算子ではなくリテラル char/が必要な場合は、二重引用符で囲む必要があります。

  • awk文字列は、文字列のように二重引用符で囲む必要がありますln -fs

  • オプションを使用して、シェル変数を awk に渡す必要があり-vます。

  • 常に変数を引用する必要があります。

  • ブロックを閉じる中括弧は、一重引用符で囲む必要があります。


findディレクトリのみを返すために使用するなど、他のいくつかの修正を追加します。

#!/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}' 
于 2013-04-08T16:45:02.633 に答える