У меня есть два файла, содержащие список всех путей к файлам с двух жестких дисков (которые должны быть абсолютно одинаковыми), в одном из которых, как мне кажется, отсутствуют файлы. Оба списка имеют путь к файлу и размер, но списки не в том же порядке (см. Пример ниже).
Существует ли команда, которая может сравнивать разницу между двумя файлами и выводить разницу в новый файл?
Пример:
файл1:
/docs/red
/docs/blue
/docs/yellow
/docs/green
файл_2:
/docs/blue
/docs/green
/docs/red
Разница_файлов:
/docs/yellow
Команда comm
предназначена для ответа на подобные вопросы. Он принимает два отсортированных файла в качестве входных данных, затем выводит три столбца текста: строки, уникальные для file1, строки, уникальные для file2, и строки, общие для обоих файлов. Вы можете подавить любой из этих трех столбцов.
В вашем случае вы бы хотели что-то вроде:
comm <(sort file1) <(sort file_2) -3 --output-delimiter=''
, который будет сравнивать file1
и file_2
, а затем выводить все существующие различия со стандартным выводом. Используйте -23
(исключить столбцы 2 и 3), если вы хотите, чтобы строки были уникальными только для file1
, или -13
(исключите столбцы 1 и 3), если вы хотите, чтобы строки были уникальными только для file_2
Использовать grep
и никакая потребность не сортирует их:
grep -Fxvf file2 file1 > diff_file
возвратит строки, которые находятся в file1, но не в file2 (строки, пропущенные в file2).
Я попытался бы использовать вид и разность:
$ diff <(sort csv1.txt) <(sort csv2.txt)
4d3
<
8d6
< /docs/yellow
Я обычно использую комбинацию (который является очень полезным визуальным различным инструментом) для таких сравнений.
Комбинация установки:
sudo apt-get install meld
Вид, и затем выдерживает сравнение:
sort csv1.txt > csv1-sorted.txt
sort csv2.txt > csv2-sorted.txt
meld csv1-sorted.txt csv2-sorted.txt
Если Ваш реальный вопрос состоит в том, как сравнить две смонтированных файловых системы, я использовал бы rsync
.
См.: Rsync сравнивают каталоги? на Unix & Linux
Можно использовать -n
(--dry-run
) чтобы не заставить файлы на самом деле быть скопированными, затем вывод является различиями. Это, по умолчанию также покажет, является ли один файл более новым, чем другой, т.е. изменилось ли содержание. Я довольно уверен, что это может быть настроено для игнорирования содержания файла.