我需要幫助編寫腳本來創建符號連結。這是我一直在後台運行的腳本。
#!/bin/bash
SOURCE="/home/$USER/www"
DEST="/var/www"
while true; do
find $SOURCE -maxdepth 1 -type d -not -name "old.**" -exec ln -s -- {} "$DEST"/{} \;
find $DEST -maxdepth 1 -type l -exec test ! -e {} \; -delete
sleep 30
done
現在我希望這個腳本能夠執行更多任務。
- 忽略已連結的資料夾和
帶有「舊」的資料夾。字首。 如果主資料夾在 $SOURCE 中不可用,請從 $DEST 中刪除符號連結。
請幫助我在此腳本上添加這些功能。謝謝。
答案1
我知道這可能比您預期的更麻煩,但我會將該-exec ...
部分重寫為一個單獨的腳本,該腳本獲取一個輸入參數(符號連結到的目錄名稱),然後檢查符號連結是否已存在(例如if [ -h "$DEST/$1" ] ...
) ,並且如果需要的話,是否解析到正確的位置(例如if [ $(readlink $DEST/$1) == $SOURCE/$1 ] ...
,如果兩個條件都為真,我們將跳過該文件,否則將(重新)創建符號連結。
然後你在 exec 類別中呼叫這個腳本,如下所示:
find $SOURCE -maxdepth 1 -type f -not -name "old.**" -exec make-symlink.sh {} \;
還有幾點:
find
將替換的檔名{}
會包括$SOURCE
:例如,在您的情況下,最終exec
命令將如下所示:ln -s -- /home/user/www/public /var/www/home/user/www/public
。透過使用 來解決這個問題basename
。在某些系統 (OS X) 上,$SRC 目錄本身將包含在
find
找到的目錄清單中。這可能不是您想要的。透過刪除輸出的第一行find
或新增-not -name $(basename $SOURCE)
子句來解決此問題。
希望這可以幫助。