Эти вопросы могут казаться элементарными, но Вы не сделали specifiy в своем вопросе, и я не хочу принимать ответы так...
Ночное дифференциальное резервное копирование BackupExec создает резервную копию SQL Server? Если так, какое резервное копирование SQL происходит во время ночного дифференциала? Действительно ли это - дифференциальное резервное копирование SQL через BackupExec?
Какова цель 15-минутных резервных копирований журнала транзакций? Тот Ваш мандат восстановления данных? Что произошло бы, если бы Вы потеряли 30 минут данных, 2 часа данных, и т.д.? Что произошло бы, если бы необходимо было восстановить назад к ночному дифференциалу или еженедельному полному резервному копированию?
Сколько времени Вам нужны к retaing резервные копии? Можно ли отбросить более старые резервные копии? Если так, каков стареющий цикл для отбрасывания более старых резервных копий? Однажды, одна неделя, и т.д.?
Не используйте 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
. Вы можете выбрать в качестве разделителя полей символ, который на самом деле не отображается ни в одном из ваших путей к файлам. Что-то вроде |
или \
, вероятно, будет достаточно.)
Diff может это сделать, но мне лень проверять.
Попробуйте comm
. comm -2-3
или comm -1 -2
, которые выдадут строки только в файле A или строки только в файле B.
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
Различайте файлы, затем используйте 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}'