Можете ли вы разбить все файлы в одном каталоге?

У меня есть куча файлов, хранящихся в разных каталогах. Они были созданы в разное время, но мне нужно проверить, что их содержимое одинаковое. Я не могу найти, как сделать diff для ВСЕХ файлов в одном каталоге. Возможно ли это или требуется другой инструмент CLI?

4 Solutions collect form web for “Можете ли вы разбить все файлы в одном каталоге?”

Если вам не нужно их сравнивать, и только нужно знать, отличаются ли они, вы можете просто разбить каждый файл в каталоге любым из файлов в каталоге через цикл for …

for i in ./*; do diff -q "$i" known-file; done

… где known-file – это любой файл в каталоге. Если вы не получаете выход, ни один из файлов не отличается; иначе вы получите список файлов, которые отличаются от known-file .

Используя стандартную утилиту cksum вместе с awk :

 find . -type f -exec cksum {} + | awk '!ck[$1$2]++ { print $3 }' 

Утилита cksum выведет три столбца для каждого файла в текущем каталоге. Первая – контрольная сумма, вторая – размер файла, а третья – имя файла.

Программа awk создаст массив, ck , привязанный к контрольной сумме и размеру. Если ключ еще не существует, будет напечатано имя файла.

Это означает, что вы получаете имена файлов в текущем каталоге с уникальными контрольными суммами + размер. Если вы получаете более одного имени файла, то эти два имеют разные контрольные суммы и / или размер.

Тестирование:

 $ ls -l total 8 -rw-r--r-- 1 kk kk 0 Oct 3 16:32 file1 -rw-r--r-- 1 kk kk 0 Oct 3 16:32 file2 -rw-r--r-- 1 kk kk 6 Oct 3 16:32 file3 -rw-r--r-- 1 kk kk 0 Oct 3 16:32 file4 -rw-r--r-- 1 kk kk 6 Oct 3 16:34 file5 $ find . -type f -exec cksum {} + | awk '!ck[$1$2]++ { print $3 }' ./file1 ./file3 

Файлы file1 , file2 и file4 пусты, но file5 file3 и file5 имеют некоторый контент. Команда показывает, что есть два набора файлов: те, которые совпадают с file1 и те же, что и file3 .

Мы также можем точно видеть, какие файлы одинаковы:

 $ find . -type f -exec cksum {} + | awk '{ ck[$1$2] = ck[$1$2] ? ck[$1$2] OFS $3 : $3 } END { for (i in ck) print ck[i] }' ./file3 ./file5 ./file1 ./file2 ./file4 

Учитывая набор файлов в каталоге d, вот результаты для 4 кодов, которые ищут дубликаты файлов:

 Environment: LC_ALL = C, LANG = C (Versions displayed with local utility "version") OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64 Distribution : Debian 8.9 (jessie) bash GNU bash 4.3.30 fdupes 1.51 jdupes 1.5.1 (2016-11-01) rdfind 1.3.4 duff 0.5.2 ----- Files in directory d: ==> d/f1 <== 1 ==> d/f11 <== 1 ==> d/f2 <== 2 ==> d/f20 <== Now is the time for all good men to come to the aid of their country. ==> d/f21 <== Now is the time for all good men to come to the aid of their country. ==> d/f22 <== Now is the time for all good men to come to the aid of their countryz ==> d/f3 <== 1 ----- Results for fdupes: d/f1 d/f3 d/f11 d/f20 d/f21 ----- Results for jdupes: Examining 7 files, 1 dirs (in 1 specified) d/f1 d/f3 d/f11 d/f20 d/f21 ----- Results for rdfind: Now scanning "d", found 7 files. Now have 7 files in total. Removed 0 files due to nonunique device and inode. Now removing files with zero size from list...removed 0 files Total size is 218 bytes or 218 b Now sorting on size:removed 0 files due to unique sizes from list.7 files left. Now eliminating candidates based on first bytes:removed 1 files from list.6 files left. Now eliminating candidates based on last bytes:removed 1 files from list.5 files left. Now eliminating candidates based on md5 checksum:removed 0 files from list.5 files left. It seems like you have 5 files that are not unique Totally, 74 b can be reduced. Now making results file results.txt ----- Results for duff: 3 files in cluster 1 (2 bytes, digest e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e) d/f1 d/f3 d/f11 2 files in cluster 2 (70 bytes, digest 7de790fbe559d66cf890671ea2ef706281a1017f) d/f20 d/f21 

С наилучшими пожеланиями … ура, drl

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

 meld dir1 dir2 

или

 meld dir1 dir2 dir3 

https://meldmerge.org/help/command-line.html

  • как включить новый файл в патч
  • Как я могу показать, сколько строк позиций переместилось в diff-выход?
  • Уменьшить резервный файл журнала
  • Как определить единственный дополнительный файл в двух других идентичных списках?
  • Программа обновления файлов конфигурации
  • В Unix, как мне получить вывод из команды diff, чтобы выглядеть как справочная страница? Где я могу нажать «b» или «f», чтобы читать дальше или назад?
  • удалять строки из выходного файла из diff
  • Патч, который не содержит номеров строк, возможно ли это?
  • Создайте рекурсивный каталог diff. Копировать ссылку и разницу. Восстановить исходный каталог
  • Как я могу просмотреть diff или, по крайней мере, более старые версии определенных файлов с помощью etckeeper?
  • Есть ли инструмент глубокого анализа Linux, который также сравнивает атрибуты файлов?
  • Interesting Posts

    Установите цвет активной вкладки tmux

    возможно ли запустить работу на переднем плане после выхода пользователя из системы

    biosdevname дает мне «p120p1» вместо p1p1 – это правильно?

    Ограничить двухстороннюю аутентификацию SSH и Apache в нелокальных сетях

    Fedora 24: порты отображаются как открытые при сканировании с сервера, но закрываются, когда они отображаются с внешней стороны

    Проблемы с сетевым подключением между разными хостами из сетевого пространства имен в одном хосте

    Могу ли я разархивировать и объединить отсортированные текстовые файлы за одну операцию?

    Ключ LUKS от известного пароля?

    Несколько файлов журнала с экраном

    Как получить PID подоболочки в Korn Shell (эквивалент $ BASHPID)

    kickstart загрузчик –driveorder конфигурации

    Насколько разумно делать надёжную работу над системами с ограничительной umask?

    Как я могу запустить системные единицы systemd по порядку?

    Почему команда curl использует URL-адреса с параметрами ввода

    Измерение, сколько энергии требуется для беспроводного подключения

    Linux и Unix - лучшая ОС в мире.