Можно ли запустить команду, используя bash, которая заменит все файлы в одной структуре каталогов на все файлы в другой. Например, если у меня есть эти две структуры каталогов:

dest
dest/A
dest/A/B
dest/A/B/file-1
dest/A/B/file-2
dest/A/B/file-3
dest/A/B/C
dest/A/B/C/file-4
dest/A/B/C/file-5

patch/
patch/A
patch/A/B
patch/A/B/file-2
patch/A/B/C
patch/A/B/C/file-6

... тогда я могу выполнить какую-то команду find/copy/xargs/sed piped, которая будет копировать каждый файл в каталоге исправлений в соответствующее место в каталоге dest? Если я просто cp -r patch/A/B dest/A/B я потеряю файлы dest/A/B/file-1 и dest/A/B/file-3 и т.д.

Редактировать:

Я пробовал запускать команды самостоятельно, например, find -type f | xargs -I {} cp {} ... но я не очень разбираюсь в командах оболочки и ничего не получалось (в конце команды ... в конце команды в основном проводились эксперименты с sed для преобразования пути к файлу путем замены ./ с dest/).

1 ответ1

3

Вы можете просто использовать rsync для достижения этой цели; rsync -Aax /input/directory/path /output/directory/path (обратите внимание, что флаги сохранят права владельца, группы и безопасности).

Я должен добавить, что ваше утверждение, из которого, как я полагаю, возникает вся ваша проблема: «Если я просто сделаю cp -r patch/A/B dest/A/B я потеряю файлы dest/A/B/file-1 и dest/A/B/file-3 т. д. "не является точным; Вы также можете просто запустить cp -r patch/A dest/A/ и достичь того, что вы, похоже, ищете (никакие уже существующие файлы не будут удалены)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .