У меня есть каталог с .patch
файлы, созданные с помощью diff.
Я хотел бы применить все эти патчи, используя patch -p1
в другой каталог.
Но патч берет только один файл, если я не cat
.
Какой была бы команда для применения нескольких файлов с помощью xargs
или аналогичный инструмент.
Предполагая, что вы используете bash / sh / zsh и т. Д.
cd /path/to/source
for i in /path/to/patches/*.patch; do patch -p1 < $i; done
Принятый ответ не сработал для меня, кажется, предполагается, что патч может принимать несколько файлов патчей в одной командной строке. Мое решение:
find /tmp/patches -type f -name '*.patch' -print0 | sort -z | xargs -t -0 -n 1 patch -p0 -i
Найти: находит файлы исправлений
Сортировка: сортирует файлы патчей, сохраняя порядок (например, 001 предшествует 002).
xargs: Вызов патча с использованием stdin в качестве аргументов
Если cat
работает, почему бы не использовать?
Использовать find
и xargs
:
find dirname -name namespec -print0 | xargs -0 patch patchargs
Пример:
find src/networking -type f -name 'network*.patch' -print0 | xargs -0 patch -p2
Это действительно работает (в Bash):
shopt -s globstar
for file in /path/to/patches/**/*.patch
do
patch -p1 < "$file"
done