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

4420
curios

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

Я попытался 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? Или у кого-нибудь есть лучший способ быстрого сравнения двух музыкальных каталогов?

Спасибо!

5

2 ответа на вопрос

7
Tony Cesaro

The rsync utility first popped into my mind when I saw your question. Doing something like below could quickly show what files are in directory a but not in 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 

This is a good option because you can compare the contents of the files as well to make sure they match. rsync's delta algorithm is optimized for this type of use case. Then if you want to make b match the contents of a, you can just remove the -n option to perform the actual sync.

Some related questions:

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

How about generating a recursive directory listing of each directory into separate files and then using diff on those two files?

Здорово. Хорошая идея, но она все равно делает / path / albumname, поэтому все альбомы помечаются, когда я запускаю diff, поскольку они имеют разные пути. curios 10 лет назад 0
`diff --recursive --quiet --new-file dir1 / dir2 /` Tom Hale 6 лет назад 0