0

我正在尝试创建一个脚本来自动创建指向特定文件夹下所有文件夹的符号链接,这应该不难做到,但由于某种原因,我的变量在这个单行脚本中传递得非常奇怪。

#!/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) fatal: 除零尝试

谁能指出我更好的方法或告诉我如何修复这个脚本?“| sh”被注释掉了,所以我可以在运行之前得到一个正确的行。

在试图让它工作的 ubuntu 12.10 x64 机器上。

4

1 回答 1

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}' 
于 2013-04-08T16:45:02.633 回答