5

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

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

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

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

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

Спасибо!

2 ответа2

7

Утилита 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 чтобы выполнить фактическую синхронизацию.

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .