Я собираюсь удалить старый каталог резервных копий, но перед этим я хотел бы убедиться, что все эти файлы существуют в более новом каталоге.
Есть ли для этого инструмент? Или мне лучше сделать это «вручную», используя find
, md5sum
, сортировка, сравнение и тд?
Уточнение:
Если у меня есть следующие списки каталогов
/path/to/old_backup/dir1/fileA
/path/to/old_backup/dir1/fileB
/path/to/old_backup/dir2/fileC
и
/path/to/new_backup/dir1/fileA
/path/to/new_backup/dir2/fileB
/path/to/new_backup/dir2/fileD
затем fileA
и fileB
существует в new_backup
(fileA
в исходном каталоге и fileB
переехал из dir1
к dir2
). fileC
с другой стороны отсутствует в new_backup
и fileD
был создан. В этой ситуации я бы хотел, чтобы результат был примерно таким:
fileC exists in old_backup, but not in new_backup.
Я бы сделал свой инструмент. Пройдите по ручному маршруту для этого с некоторыми интересными находками:
find /oldbackup -exec basename {} ";" > /tmp/old.txt
find /newbackup -exec basename {} ";" > /tmp/new.txt
for $filename in `cat /tmp/old.txt`
do
grep $filename /tmp/new.txt
if [ "$?" -ne "0" ];
then
echo "$filename not in new backup"
fi
done
Это невероятно небрежно, но основной алгоритм должен быть в порядке. Вы также можете немного поработать, чтобы выяснить, какие файлы не имеют копий в обоих:
find /oldbackup -exec basename {} ";" > /tmp/old.txt
find /newbackup -exec basename {} ";" > /tmp/new.txt
cat /tmp/old.txt /tmp/new.txt | sort | uniq -c | grep -v 2
Я могу объяснить по частям, если вам нужно.
У Python есть несколько хороших стандартных библиотечных модулей для этого, называемых dircmp / filecmp.
Из PyMOTW Дуга Хеллмана. Этот небольшой фрагмент кода дает вам:
import filecmp
filecmp.dircmp('example/dir1', 'example/dir2').report()
Дает тебе:
diff example/dir1 example/dir2
Only in example/dir1 : ['dir_only_in_dir1', 'file_only_in_dir1']
Only in example/dir2 : ['dir_only_in_dir2', 'file_only_in_dir2']
Identical files : ['common_file', 'not_the_same']
Common subdirectories : ['common_dir']
Common funny cases : ['file_in_dir1']
Дуг объясняет, как обстоят дела с filecmp / dircmp лучше, чем я:
http://www.doughellmann.com/PyMOTW/filecmp/
Мне нравится python для таких вещей, потому что он намного легче переносится между Linux / Windows / Solaris для меня, чем что-либо на основе оболочки.
Используйте diff -uRN dir1 dir2
Если файлы идеальные, разница будет пуста ... Или покажет!