Найдите файл, проверьте размер и перезапись, когда размер файла будет отличаться

Возможно, необходимо использовать -E опция (или -r как объяснено на руководстве) для хранения совместимости с GNU Sed. В Вашем случае Вы могли установить Гну Sed, если Вы привыкли к нему (порт gsed на FreeBSD), или это приложит долгие усилия для портирования сценариев.

И помните. Если некоторая команда на BSD не действует как версия гну той утилиты, это не означает, что это повреждается ;)

3
30.12.2014, 00:48
2 ответа

Я предполагаю, что вы изменили исходный код в одном из ваших исходных файлов на одном из ваших серверов и хотите портировать исправления на другие веб-сайты, верно? Если вы сохранили копию Orginial File (я всегда делаю, когда я не знаю проекта по сердцу), используйте свой лучший актив: 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 могут работать на дереве каталогов, чтобы рекурсивно применять фиксимы. Вы также можете построить более сложный патч, объединяя их в одном файле. См. Патч --help и diff --help Для более подробной информации о том, как их использовать.

2
27.01.2020, 21:23

Согласно вашему первоначальному вопросу дословно, это то, что вы хотите, но смотрите мой комментарий ниже. Вы можете попробовать сначала найти часть самостоятельно, чтобы удостовериться, что у вас есть нужные файлы.

find /home -maxdepth 3 -mindepth 3 -path */phpthumb/filename ! -size xxxx |
  xargs -t -n 1 cp /home/test/testuser/phpthumb/filename

Для того, чтобы это сработало согласно моему комментарию и заменило те, которые имеют такой же размер, просто опустите ! .

Обновление

На самом деле сравнение MD5-сумм - лучший способ сделать это. Это более надежный способ, так как, возможно, один из ваших настраиваемых файлов будет иметь одинаковый размер. Вы можете попробовать:

original_md5=$(md5sum /path/to/original | awk '{print $1}')
echo /home/*/*/phpthumb/filename |
  xargs md5sum |
  grep "^$original_md5" |
  awk '{print $2}' |
  xargs -t -n 1 cp /home/test/testuser/phpthumb/filename

Это для того, чтобы заменить все файлы, соответствующие оригиналу. Чтобы сделать это в соответствии с вашим вопросом дословно, добавьте опцию -v в grep. Обратите внимание, что ни один из этих ответов не сработает, если в любом из путей поиска есть пробелы (на тот случай, если они были добавлены с момента последнего вопроса).

1
27.01.2020, 21:23

Теги

Похожие вопросы