Shell-Script

當文件大小不同時查找文件,檢查大小並覆蓋

  • December 29, 2014

今天我在自己編寫的 CMS 中發現了一個小錯誤。現在我想用相同的文件名重寫伺服器上的所有文件。但是,我確實有一些客戶定制了特定文件,因此我無法覆蓋所有文件。

由於有些客戶有自定義文件,我需要檢查文件大小。

當文件大小與其源不同時,它應該覆蓋。當文件大小相同時,它應該跳過該文件。

幾個月前,我問了一個有點相似的問題,如何覆蓋來自 1 個源的多個文件。我也設法解決了這個問題:

echo /home/*/*/phpthumb | xargs -t -n 1 cp -r /home/test/testuser/phpthumb/*

我可以在帶有小 if / else 的 .sh 腳本中使用它來重寫或跳過文件嗎?如果是,我該如何做到這一點?

我的 unix 經驗是平均的,所以如果我的問題不清楚,請隨時提問。

親切的問候。

我假設您更改了您的一台伺服器上的一個源文件中的原始碼,並希望將修復程序移植到其他網站,對嗎?如果您保留了原始文件的副本(當我不知道該項目時,我總是這樣做),請使用您最好的資產diff::

diff -Nau old/file new/file > file.patch

您將有原始和更正源文件之間的差異,您可以通過 SSH 修補所有伺服器,例如:

# See what's to be done, no action
cat file.patch | ssh server "patch -d <directory> --dry-run"
# Apply the patch if all seems good
cat file.patch | ssh server "patch -d <directory>"

如果您未更改的副本與更正的文件位於不同的目錄中,您可能需要調整更新檔頭。但基本上,如果兩者都在同一目錄中,file.php即固定文件和file.php.orig原始文件,則cd 到您網站的根目錄並執行diff命令,例如:

cd /home/www/htdocs/www.mysite.tld
diff -Nau some/deep/dir/file.orig.php some/deep/dir/file.php > /tmp/file.patch

來自其他網站的根目錄:

# See what's to be done, no action
patch -d /home/www/htdocs/www.my.other.site.tld --dry-run < /tmp/file.patch
# Apply the patch if all seems good
patch -d /home/www/htdocs/www.my.other.site.tld < /tmp/file.patch

其他有用的論點是-p. 兩者都diff可以patch在目錄樹上工作以遞歸地應用修復。您還可以通過將它們連接到一個文件中來建構更複雜的更新檔。有關如何使用它們的更多詳細資訊,請參閱patch --help和。diff --help

引用自:https://unix.stackexchange.com/questions/176430