Как я могу заставить 'разность' показывать только добавленные и удаленные строки? Если разность не может сделать этого, какой инструмент может? Возьмите 2

Эти вопросы могут казаться элементарными, но Вы не сделали specifiy в своем вопросе, и я не хочу принимать ответы так...

Ночное дифференциальное резервное копирование BackupExec создает резервную копию SQL Server? Если так, какое резервное копирование SQL происходит во время ночного дифференциала? Действительно ли это - дифференциальное резервное копирование SQL через BackupExec?

Какова цель 15-минутных резервных копирований журнала транзакций? Тот Ваш мандат восстановления данных? Что произошло бы, если бы Вы потеряли 30 минут данных, 2 часа данных, и т.д.? Что произошло бы, если бы необходимо было восстановить назад к ночному дифференциалу или еженедельному полному резервному копированию?

Сколько времени Вам нужны к retaing резервные копии? Можно ли отбросить более старые резервные копии? Если так, каков стареющий цикл для отбрасывания более старых резервных копий? Однажды, одна неделя, и т.д.?

3
задан 18 January 2013 в 03:28
4 ответа

Не используйте diff , используйте вместо этого join . Поскольку ваши входные файлы уже имеют sort ed, следующий результат должен дать именно тот результат, который вы запрашивали:

join -v 2 /tmp/invent.txt /tmp/backup.txt > /tmp/in-backup-but-not-invent.txt

(Если пути к файлам находятся в /tmp/backup.txt или ] /tmp/invent.txt содержит пробелы, тогда join может работать некорректно с параметрами, указанными выше. В этом случае вам придется использовать -t , чтобы указать символ без пробелов в качестве разделителя полей для join . Вы можете выбрать в качестве разделителя полей символ, который на самом деле не отображается ни в одном из ваших путей к файлам. Что-то вроде | или \ , вероятно, будет достаточно.)

3
ответ дан 3 December 2019 в 04:49

Diff может это сделать, но мне лень проверять.

Попробуйте comm . comm -2-3 или comm -1 -2 , которые выдадут строки только в файле A или строки только в файле B.

2
ответ дан 3 December 2019 в 04:49
for i in `cat /tmp/invent.txt`; do grep ^$i$ /tmp/backup.txt >/dev/null || echo $i ; done

Это отобразит все имена в /tmp/invent.txt , которых нет в /tmp/backup.txt

Edit

Я нашел другой способ, используя diff : - ( diff -r dir1 dir2 )

-r, --recursive означает Рекурсивно сравнивать любые найдены подкаталоги.

$ mkdir -p dir1/dir dir2/dir/dir

$ diff -r dir1 dir2
Only in dir2/dir: dir

$ touch dir1/file{a..d}

$ touch dir2/file{a..d}

$ touch dir2/dir/file{a..d}

$ echo hi >  dir2/filea

$ diff -q -r dir1 dir2
Only in dir2/dir: dir
Only in dir2/dir: filea
Only in dir2/dir: fileb
Only in dir2/dir: filec
Only in dir2/dir: filed
Files dir1/filea and dir2/filea differ
3
ответ дан 3 December 2019 в 04:49

Различайте файлы, затем используйте awk для поиска нужных строк ( / ^ <), удалите начальный бит ( gsub (/ ^ ) и напечатайте совпавшую строку.

diff file1 file2 | awk '/^</ {gsub(/^</,""); print}'

Итак, если вам нужен однострочник, вы можете даже сделать что-то вроде этого.

diff <(cd /store ; find . -type f -print | sort) \
     <(cd /fbkup ; find . -type f -print | sort) | \
     awk '/^</ {gsub(/^</,""); print}'
3
ответ дан 3 December 2019 в 04:49

Теги

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