试图在awk中创建一个字符串,抱怨零除

时间:2013-04-08 16:42:25

标签: bash unix awk terminal

我正在尝试创建一个脚本来自动创建符号链接到特定文件夹下的所有文件夹,这应该是很难做的但是由于某种原因我的变量在这个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 

但是我得到了一个输出:awk:cmd。 line:1:(FILENAME = - FNR = 1)致命:尝试除零

任何人都可以指点我一个更好的方法或告诉我如何修复这个脚本? “| sh”被注释掉,所以我可以在跑步之前得到一条正确的线。

在ubuntu 12.10 x64上试图让它正常工作。

1 个答案:

答案 0 :(得分:1)

你需要的是(至少在语法上)

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

注意:

  • 如果您不想使用除法运算符,但需要文字字符/,则需要用双引号括起来。

  • 字符串需要用awk中的双引号括起来,如字符串ln -fs

  • 您需要使用-v选项将shell变量传递给awk。

  • 您应该始终引用您的变量。

  • 关闭块的大括号需要在单引号内。


添加一些其他修复,例如使用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}'