Различие и исправление для нескольких файлов

#diff #patch

#изменение #исправление

Вопрос:

Я новичок в Linux и bash, поэтому прошу прощения, если мой вопрос покажется глупым, но у меня проблема с созданием и применением файла исправления.

Допустим, у меня есть два каталога, исходный / и новый /, и в исходном каталоге есть несколько файлов, таких как 4 или 5, которые либо полностью отсутствуют в новом /, либо изменены, и некоторые из них находятся в некоторых подкаталогах.

Согласно какому-то руководству, которое я должен использовать diff -rubN original/ new/ > patch.diff , но в других руководствах указано обратное, что я воздерживаюсь от использования diff -rubN new/ original/ > patch.diff

В любом случае, если я использую первый, а затем запускаю patch -t -p0 < patch.diff , происходит странная вещь, я получаю результаты «исправление исходного файла / вложенной папки / имени файла» для всех файлов, а затем исходная / папка исчезает, новая / папка по-прежнему пуста, и я должен снова запустить команду исправления. Когда я это делаю, я получаю сообщения «Следующий патч удалит файл new / subfolder / filename, который не существует!» — после этого есть файлы в новой / папке, что нормально, но я не знаю:

  • почему была удалена исходная / папка
  • почему я должен дважды запускать команду исправления, чтобы переместить файлы в новую / папку
  • почему исправление выдает мне сообщение о том, что файл не существует, когда они это делают?

Редактировать: если из текста неясно, я пытаюсь перенести изменения, которые находятся в файлах в исходной / папке, в новую / папку. Похоже, что второе различие ( diff -rubN new/ original/ > patch.diff ) работает для этого случая и только для одного файла так, как должно… но как только различие касается более чем одного файла, например, если я добавляю новый файл в исходную папку / , который не существует в новой папке /, исправление заканчивается тем странным образом, удаляя файл, которого нет в новой папке /, и печатая сообщение, что «Следующий патч создаст файл ../ путь к исходному файлу /.. который уже существует!» и «исправление файла .. / путь к исходному файлу»

Также одно новое наблюдение: после первого исправления только файлы, которые не существуют в новой / папке, похоже, удаляются из исходной / папки

Правка 2: Хорошо, просто выясните, что если я использую cd new/; patch -p1 < ../patch.diff , исправление заканчивается нормально, и исходная папка / не удаляется. Я просто не понял, почему потому что мне кажется, что это один и тот же код -> p0 из каталога, в котором находятся папки / original и / new, или p1 из / new каталога…. Я не вижу разницы