今日私が書いたCMSで小さなバグを見つけました。さて、同じファイル名でサーバー上のすべてのファイルを書き換えたいと思います。ただし、特定のファイルをカスタマイズする一部のクライアントがあるため、そのファイルをすべて無視することはできません。
一部の顧客はカスタムファイルを持っているため、ファイルサイズを確認する必要があります。
ファイルサイズがソースと異なる場合は上書きする必要があります。ファイルサイズが同じ場合は、ファイルをスキップする必要があります。
数ヶ月前、私は1つのソースから複数のファイルを上書きする方法についてかなり似た質問をしました。私もこの問題を解決しました。
echo /home/*/*/phpthumb | xargs -t -n 1 cp -r /home/test/testuser/phpthumb/*
ファイルを書き換えるかスキップするためにif / elseがほとんどない.shスクリプトでこれを使用できますか?では、どうすればこれを達成できますか?
私のUnixの経験は非常に平均的なので、質問が明確でない場合は、お気軽にお問い合わせください。
ありがとうございます。
ベストアンサー1
私は、あるサーバーのソースファイルの1つでソースコードを変更し、修正を別のサイトに移植したいとします。そうですか?元のファイルのコピーを保存している場合(プロジェクトが記憶されていないときは常に保存します)、最高の資産を使用してください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
Webサイトのルートに移動して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