2015-08-21 18 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