Проверьте, существуют ли все файлы в каталоге в другом месте
Я собираюсь удалить старый каталог резервных копий, но перед этим я хотел бы убедиться, что все эти файлы существуют в более новом каталоге.
Есть ли инструмент для этого? Или мне лучше сделать это "вручную", используя 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.
3 ответа
Я бы сделал свой собственный инструмент. Пройдите по этому маршруту вручную с некоторыми причудливыми находками:
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
Разница будет пустой, если файлы безупречны... Или покажет!