2015-08-21 17 views
-1

需要做一个循环符号链接到任何我想要的任何文件上我想每个用户..!循环符号链接passwd在shell脚本中

我可以使用这个命令

awk -F: ' { p="/home/"$1; printf "%s\n%s\n%s\n",p"/public_html/example.php",p"/www/example.html",p"/tmp/example.txt" }' /etc/passwd | sort 

但怎样才能使一个循环的所有用户 和输出像环?????????:

example.php > /home/user1/public_html/example.php 
example.html > /home/user2/www/example.php 
example.php > /home/user2/tmp/example.txt 
example.php > /home/user3/public_html/example.php 
example.php > /home/user3/www/example.html 
example.php > /home/user3/tmp/example.txt 
[...snip...] 

而且我的意思是... 重复或测试路径为 以上的选定文件并通过使用命令创建一个在每个路径中的所有权利文件的符号链接

ln -s 

我尝试的可执行命令

#/bin/bash 
mkdir folder 
a=awk -F: ' { p="/home/"$1; printf "%s\n%s\n%s\n",p"/public_html/example.php",p"/www/example.html",p"/tmp/example.txt" }' /etc/passwd | sort 
ln -s "$a" > folder 
done 

但它失败

,我等你的答案 ,,,谢谢stackoverflow.com

+0

我很难理解你的问题。 1.在示例输出中,您将不同扩展名的文件(例如,第二行中的“.html”与“.php”)排成一行,这是故意的吗? –

+0

2.在您的示例bash脚本中,调用命令'-F:',其shell变量'a'设置为'awk'。你可能打算把命令的结果赋给'a',对吗?例如。 'a = $(awk -F:... | sort)'? –

+0

3.在你的示例bash脚本中,用一个参数(shell变量'a'的全部内容,包括所有空格和嵌入换行符)执行'ln -s'。然而,'ln -s'只需要两个参数,一个源和一个目标。您继续将该命令的标准输出重定向到'folder'。但是,为了达到这个目的,文件夹必须是文件,或者必须是可创建的文件,但是您已在第二行中通过该名称创建了一个文件夹。 –

回答

0

尝试是这样的:

IFS=: 
while read user rest; do 
    for file in public_html/example.php www/example.php; do 
     if [ -e "/home/$user/$file" ]; then 
      mkdir -p "/home/$user/folder" 
      ln -s "/home/$user/$file" "/home/$user/folder/example.php" 
      break 
     fi 
    done 
done </etc/passwd 

这个解析/etc/passwd在shell中。 IFS=:设置内部字段分隔符,这比使用read将读取的行拆分为字段。第一个字段被分配到shell变量user,并且所有其余字段被分配到rest(并且被忽略)。

注意:对于曾经使用过的脚本,这可能是正确的,但有几个问题需要注意。

  1. 您可能不希望为所有用户执行符号链接,只适用于普通用户。这个脚本通过假定用户的主目录是/ home/$ user来确保这一点,通常它不包括root和其他特殊用途的用户。然而,这是脆弱的,例如,主目录在某些系统上的命名可能不同。

  2. 如果在用户的主目录中找不到任何文件,则不会创建符号链接。

  3. 不调整符号链接的权限。生成的符号链接具有脚本运行的权限。

+0

你好,感谢您的回复,但我执行 #/ bin/bash IFS =: while read user rest;在public_html/wp-config中为文件做 ;如果[-e“/ home/$ user/$ file”];则执行 ;然后 的mkdir -p “的/ home/$ USER /文件夹” LN-S “的/ home/$ USER/$文件” “/home/$user/folder/example.php” 破 网络 做 做 saba