Как найти и заменить все случаи строки рекурсивно в дереве каталогов?

Я часто должен вставлять, обновлять или удалять данные по живому месту производства (Как аналитик данных, который является, вероятно, 40% моего задания). Большую часть времени это через автоматизированный DTS или пакеты SSIS. Однако мы - также люди, которые должны зафиксировать проблемные записи или производство обновления, когда крупный клиент управляемое изменение происходит (такие как перестройка отдела продаж). Иногда проблемы происходят из-за ошибок в коде, но обычно они в результате странных вещей, которые клиент сделал в их файл или вещи, которые пользователям удалось испортить для сохранения нас время, решив проблему или потому что они хотели обойти нормальный процесс для просто этого быстрого легкого изменения! (Отметьте пользователям - не пытайтесь починить вещи вручную, которые обычно делаются посредством автоматизированного процесса, Вы не знаете то, что еще может делать процесс!!!!!) Поэтому иногда у нас нет роскоши тестирования сценария на dev сначала как, что нуждается в фиксации, не находится на dev.

Мои правила: Никогда не вставляйте данные непосредственно от файла до производственной таблицы. Всегда приносите его в рабочую таблицу, таким образом, можно просмотреть его сначала. Имейте в распоряжении проверки так, чтобы, если будут неправильные данные в файле, процесс перестанет работать, прежде чем Вы доберетесь до заключительного шага вставки в производственные данные. Очистите данные сначала.

, Если необходимо удалить большое количество записей, оно может сохранить Вас при выборе тех записей сначала в рабочую таблицу. Тогда сделайте удаление. Тот путь, если вещи идут не так, как надо, намного легче восстановиться. Если Вы имеете контрольные таблицы, знаете, как восстановить данные от них быстро. Снова, если что-то идет не так, как надо, это намного быстрее для восстановления с контрольных таблиц, чем от резервного копирования на магнитную ленту.

я пишу оператор удаления как это:

начинаются, tran

удаляют

- выбор (перечислите важные поля для наблюдения здесь)

от table1, где field1 = 'x'

- откатывают tran

- Примечание tran

фиксации несколько вещей об этом. Сначала при помощи псевдонима я не могу случайно удалить целую таблицу, только выделив одну строку и выполнив код. Путем запуска, где пункт на той же строке как таблица я гораздо менее вероятен, чтобы избежать выделять его. Если бы у меня были соединения, то я удостоверился бы каждый концы строки в месте, где код не будет работать, если он не перейдет к следующей строке. Снова, это гарантирует, чтобы Вы получили ошибку вместо oopsie. Всегда выполните выбор сначала и отметьте количество затронутых записей (и посмотрите на данные, чтобы удостовериться, что это похоже на правильные записи!) Тогда не фиксируют, если количество записей не корректно, когда Вы работаете, фактические удаляют. Да, это более симпатично для запуска, где на отдельной строке, более безопасно закончить каждую строку удаления так, чтобы это не работало, если целый запрос не будет выделен.

Обновления следуют подобным правилам.

46
задан Paused until further notice. 18 October 2009 в 19:42
поделиться

1 ответ

Попробуйте следующее:

find /home/user/ -type f | xargs sed -i  's/a\.example\.com/b.example.com/g'

Если вы хотите игнорировать каталоги с точками

find . \( ! -regex '.*/\..*' \) -type f | xargs sed -i 's/a\.example\.com/b.example.com/g'

Изменить: экранированные точки в поисковом выражении

76
ответ дан 26 November 2019 в 20:14
поделиться
Другие вопросы по тегам:

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