Unix

多個目錄隨著使用者權限的變化而更新

  • July 28, 2010

我在一台裝有 FreeBSD7.3 的機器上有多個使用者。每個使用者都有自己的站點(只有一個)。每個站點都是主站點的副本,略有不同(即數據庫配置、模板文件)。

這就像一台機器上有許多不同使用者的 Wordpress。

問題是:

我已經為 master-site 做了一個更新檔。我如何一次更新所有這些站點,正確地更改使用者權限和所有權。

IE:我有類似的更新檔:

/temp/patch/www/

–index.php –includes

/system.php

而且我有許多使用者具有相同的目錄結構和一些其他文件:

/home/mike/www/mikebestsite.com/

–index.php –index2.php

–includes

/system.php

/home/john/www/superjohnsite.com/

–index.php –includes

/system.php

–includes/break.php

/home/larry/www/larry-e-king.com/

–index.php –includes

/system.php

–css/larry.css

這是一個快速的 bash 片段,應該可以為您解決問題。

我假設其中的所有內容/home都是一個目錄,並且匹配項*\.com是您要替換的站點index.phpincludes/system.php. 如果此邏輯不合適,您可能需要自己進行一些修改。

我已經在有限的限制內對其進行了測試。確保ls -ldFreeBSD 中的輸出在第三個欄位中包含使用者,在第四個欄位中包含組。此外,--reply=yes是一種 GNU 主義。您可能必須使用-f或等效的 BSD 來強制替換現有文件而無需互動。

for D in `find /home -type d -name '*\.com'`
  do
    myuser=`ls -ld $D | awk '{print $3}'`
    mygroup=`ls -ld $D | awk '{print $4}'`

    echo "Updating ${D}..."
    cp ${D}/index.php ${D}/index.php.ORIG
    cp ${D}/includes/system.php ${D}/includes/system.php.ORIG
    cp --reply=yes /path/to/temp/patch/www/index.php ${D}
    cp --reply=yes /path/to/temp/patch/www/includes/system.php ${D}/includes
    chown $myuser:$mygroup ${D}/index.php
    chown $myuser:$mygroup ${D}/includes/system.php
    echo "--------------------------------"
    echo ""
done

引用自:https://serverfault.com/questions/164986