Сравнение содержимого двух файлов

У меня есть два файла, содержащие список всех путей к файлам с двух жестких дисков (которые должны быть абсолютно одинаковыми), в одном из которых, как мне кажется, отсутствуют файлы. Оба списка имеют путь к файлу и размер, но списки не в том же порядке (см. Пример ниже).

Существует ли команда, которая может сравнивать разницу между двумя файлами и выводить разницу в новый файл?

Пример:

файл1:

/docs/red
/docs/blue
/docs/yellow
/docs/green

файл_2:

/docs/blue
/docs/green
/docs/red

Разница_файлов:

/docs/yellow
5
задан 1 May 2018 в 08:26

5 ответов

Команда comm предназначена для ответа на подобные вопросы. Он принимает два отсортированных файла в качестве входных данных, затем выводит три столбца текста: строки, уникальные для file1, строки, уникальные для file2, и строки, общие для обоих файлов. Вы можете подавить любой из этих трех столбцов.

В вашем случае вы бы хотели что-то вроде:

comm <(sort file1) <(sort file_2) -3 --output-delimiter=''

, который будет сравнивать file1 и file_2, а затем выводить все существующие различия со стандартным выводом. Используйте -23 (исключить столбцы 2 и 3), если вы хотите, чтобы строки были уникальными только для file1, или -13 (исключите столбцы 1 и 3), если вы хотите, чтобы строки были уникальными только для file_2

0
ответ дан 1 May 2018 в 08:26

Использовать grep и никакая потребность не сортирует их:

grep -Fxvf file2 file1 > diff_file

возвратит строки, которые находятся в file1, но не в file2 (строки, пропущенные в file2).

8
ответ дан 23 November 2019 в 08:38

Я попытался бы использовать вид и разность:

$ diff <(sort csv1.txt) <(sort csv2.txt)
4d3
< 
8d6
< /docs/yellow
6
ответ дан 23 November 2019 в 08:38

Я обычно использую комбинацию (который является очень полезным визуальным различным инструментом) для таких сравнений.

Комбинация установки:

sudo apt-get install meld

Вид, и затем выдерживает сравнение:

sort csv1.txt > csv1-sorted.txt
sort csv2.txt > csv2-sorted.txt
meld csv1-sorted.txt csv2-sorted.txt 
4
ответ дан 23 November 2019 в 08:38

Если Ваш реальный вопрос состоит в том, как сравнить две смонтированных файловых системы, я использовал бы rsync.

См.: Rsync сравнивают каталоги? на Unix & Linux

Можно использовать -n (--dry-run) чтобы не заставить файлы на самом деле быть скопированными, затем вывод является различиями. Это, по умолчанию также покажет, является ли один файл более новым, чем другой, т.е. изменилось ли содержание. Я довольно уверен, что это может быть настроено для игнорирования содержания файла.

1
ответ дан 23 November 2019 в 08:38

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

Похожие вопросы: