Bash 试图在awk中创建字符串时,抱怨使用零除法
我正试图创建一个脚本,自动创建一个特定文件夹下所有文件夹的符号链接,这应该很难做到,但由于某些原因,我的变量在这个单行脚本中传递得非常奇怪Bash 试图在awk中创建字符串时,抱怨使用零除法,bash,unix,awk,terminal,Bash,Unix,Awk,Terminal,我正试图创建一个脚本,自动创建一个特定文件夹下所有文件夹的符号链接,这应该很难做到,但由于某些原因,我的变量在这个单行脚本中传递得非常奇怪 #!/bin/bash # ---------------------------------- # --------- TotalKrill ------------- # ---------------------------------- # Script to create symlinks to my clouded folder in my ho
#!/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。第1行:(FILENAME=-FNR=1)致命:尝试用零除
谁能告诉我一个更好的方法或者告诉我如何修复这个脚本?
注释掉了“| sh”,这样我可以在运行之前获得正确的行
在Ubuntu12.10 x64上尝试让它工作。您需要的是(至少在语法上):
注:
- 如果不需要除法运算符,而需要文字字符
,则需要将其包含在双引号中/
- 字符串需要在
中用双引号括起来,就像字符串awk
ln-fs
- 您需要使用
选项将shell变量传递给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}'
一些评论/问题:1)目录/文件名中是否有空格或其他特殊字符?2)
ls-1
也返回文件你只想创建那些目录吗?ls-1$searchfolderdir$searchfoldername | awk-v t=“$Target”-v d=“$searchfolderdir”{print“ln-fs”t$0,d$0}sh
#!/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}'