сравнить два дерева каталогов

6

У меня есть две музыкальные библиотеки, одна более новая версия, чем другая. Я хотел бы сравнить их, чтобы выяснить, какие файлы мне нужно скопировать из нового музыкального дерева в старое.

Я попытался diff --brief -r /oldmusicdir/ /newmusicdir/на основе предложения другого пользователя, но ^ C процесс через пятнадцать минут (я предполагаю, что diff сканирует сами музыкальные файлы - что не является необходимым).

Затем я попробовал find /oldmusicdir/ -type d | sort > oldmusicdirстарое и новое, затем запустил diff oldmusicdir newmusicdirОднако, поскольку я хранил музыкальные каталоги в разных местах, каждая запись была помечена.

Затем я попытался запустить, find /musicdir/ -type d | basename -s - | sort > musicdirно затем мой файл musicdir просто читал "-"

Кто-нибудь знает, как получить базовое имя для приема от STDIN? Или у кого-нибудь есть лучший способ быстрого сравнения двух музыкальных каталогов?

Спасибо!

диковинки
источник

Ответы:

8

rsyncУтилита первый пришла мне в голову , когда я увидел ваш вопрос. Выполнение чего-либо подобного приведенному ниже может быстро показать, какие файлы находятся в каталоге, aа не в b:

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

Это хороший вариант, потому что вы можете сравнить содержимое файлов, чтобы убедиться, что они совпадают. rsyncДельта-алгоритм оптимизирован для этого типа использования. Затем, если вы хотите, чтобы bсодержимое совпадало a, вы можете просто удалить -nопцию, чтобы выполнить фактическую синхронизацию.

Некоторые связанные вопросы:

Тони Чезаро
источник
Rsync кажется очень мощной программой. Определенно стоит потратить мое время, чтобы узнать. Запуск rsync -nv --delete a/ b/ | grep deletingдал мне список файлов, которые существовали на b, но не a. Спасибо!
любопытно
0

Как насчет генерации рекурсивного списка каталогов каждого каталога в отдельных файлах и последующего использования diffэтих двух файлов?

Джейсон Аллер
источник
Здорово. Хорошая идея, но она все еще делает / path / albumname, поэтому все альбомы помечаются, когда я запускаю diff, поскольку они имеют разные пути.
любопытно
diff --recursive --quiet --new-file dir1/ dir2/
Том Хейл,