Как мне проверить, что две папки одинаковы в linux

Я переместил веб-сайт с одного сервера на другой и скопировал файлы с помощью SCP.

Теперь я хочу проверить, что все файлы были скопированы нормально.

Как сравнить сайты?

Подсчитать файлы для папки?

Получить общий размер файлов для дерева папок?

или есть лучший способ сравнить сайты?

Павел

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
23
0
20 167
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Сделайте контрольные суммы для всех файлов, например, используя md5sum. Если они все одинаковы для всех файлов и ни один файл не отсутствует, все в порядке.

Попробуйте рекурсивно различие вашего каталога. Вы получите хорошее резюме, если в одном из каталогов что-то изменится.

cd website
find . -type f -print | sort | xargs sha1sum

создаст список контрольных сумм для файлов. Затем вы можете diff, чтобы увидеть, есть ли какие-либо отсутствующие / добавленные / другие файлы.

возможно, вы можете использовать что-то подобное:

find <original root dir> | xargs md5sum  > original
find <new root dir> | xargs md5sum  > new
diff original new

Если вы использовали scp, вы, вероятно, также можете использовать rsync поверх ssh.

rsync -avH --delete-after 1.example.com:/path/to/your/dir 2.example.com:/path/to/your/

rsync делает за вас контрольные суммы.

Обязательно используйте параметр -n для пробного запуска. Проверьте страницу руководства.

Я предпочитаю rsync, а не scp или даже local cp, каждый раз, когда могу его использовать.

Если rsync не подходит, md5sum может генерировать дайджесты md5, а md5sumc --check проверит их.

I have been move a web site from one server to another I copied the files using SCP

Вы можете сделать это с помощью rsync, это здорово, если вы просто хотите что-то отразить.

/ Йохан

Обновление: похоже, что @rjack победил меня с ответом rsync за 6 секунд :-)

Ответ принят как подходящий

Если бы вы использовали scp, вы, вероятно, могли бы использовать rsync.

rsync не будет передавать файлы, которые уже обновлены, поэтому вы можете использовать его для проверки актуальности копии, просто запустив rsync еще раз.

Если вы делали что-то подобное на старом хосте:

scp -r from/my/dir newhost:/to/new/dir

Тогда вы могли бы сделать что-нибудь вроде

rsync -a --progress from/my/dir newhost:/to/new/dir

'-A' - это сокращение от 'archive', которое выполняет рекурсивное копирование и сохраняет разрешения, права собственности и т. д. Проверьте страница руководства для получения дополнительной информации, так как он может делать много умных вещей.

Использование diff с рекурсивной опцией -r и быстрой опцией -q. Это лучший и самый быстрый способ сделать это.

diff -r -q /path/to/dir1 /path/to/dir2

Он не скажет вам, в чем разница (удалите параметр -q, чтобы увидеть это), но он очень быстро сообщит вам, все ли файлы одинаковы.

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

Кто-нибудь знает, сколько времени это займет (приблизительно) для каталога 2 ТБ?

user1271772 08.02.2020 22:19

Может ли он обнаружить разницу, если один файл поврежден, а другой исправен?

Sandu Ursu 12.02.2021 15:30

Я бы добавил это к Дугласу Лидеру или Эйнеки, но, к сожалению, у меня недостаточно репутации для комментариев. В любом случае, их ответы прекрасны, за исключением того, что они не работают для имен файлов с пробелами. Чтобы это сработало, сделайте

find [dir1] -type f -print0 | xargs -0 [preferred hash function] > [file1]

find [dir2] -type f -print0 | xargs -0 [preferred hash function] > [file2]

diff -y [file1] [file2]

Просто из экспериментов мне также нравится использовать аргумент -W ### для diff и выводить его в файл, который легче анализировать и понимать в терминале.

этот метод не сможет проверить пустые каталоги, и вам нужно отсортировать результат.

zidarsk8 01.08.2014 14:57

Чтобы добавить в ответ Сидни. Нет необходимости отфильтровывать -type f и создавать хэш-код. В ответ на zidarsk8 вам не нужно сортировать, поскольку find, как и ls, по умолчанию сортирует имена файлов в алфавитном порядке. Это также работает для пустых каталогов.

Подводя итог, можно выделить 3 лучших ответа: (P.S. Приятно провести пробный запуск с rsync)

diff -r -q /path/to/dir1 /path/to/dir2

diff <(cd dir1 && find) <(cd dir2 && find)

rsync --dry-run -avh from/my/dir newhost:/to/new/dir

Другие вопросы по теме