Shell-Script
當文件大小不同時查找文件,檢查大小並覆蓋
今天我在自己編寫的 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