У меня есть два файла, содержащие список всех путей файлов с двух жестких дисков (предполагается, что они точно такие же), один из которых, я думаю, имеет недостающие файлы.
Есть ли команда, которая может сравнивать разницу между этими двумя файлами и выводить разницу в один и тот же порядок (см. Пример ниже). новый файл?
Пример:
file1:
/docs/red
/docs/blue
/docs/yellow
/docs/green
file_2:
/docs/blue
/docs/green
/docs/red
Difference_File:
/docs/yellow
Я обычно использую meld (это очень полезный инструмент визуального разграничения) для таких сравнений.
Установите meld:
sudo apt-get install meld
Сортировка, а затем сравните:
sort csv1.txt > csv1-sorted.txt
sort csv2.txt > csv2-sorted.txt
meld csv1-sorted.txt csv2-sorted.txt
Я бы попытался использовать sort и diff:
$ diff <(sort csv1.txt) <(sort csv2.txt)
4d3
<
8d6
< /docs/yellow
если ваш реальный вопрос заключается в том, как сравнить две смонтированные файловые системы я буду использовать rsync.
см.: сравнить каталоги по rsync? на Unix и Linux
Вы можете использовать -n (--dry-run), не вызывает никакого файлов, чтобы на самом деле быть скопированы, то на выходе разницы. Это, по умолчанию также будет показывать если файл новее, чем другой, т. е. его содержимое изменилось. Я довольно уверен, что он может быть настроен так, чтобы игнорировать содержимое файла.
Команда comm предназначена для ответа на этот вопрос. Для этого нужно взять два отсортированных файла в качестве ввода, затем вывести три столбца текста: строки, уникальные для файла1, строки, уникальные для файла2, и строки, общие для обоих файлов. Вы можете подавить любой из этих трех столбцов.
В вашем случае вам понадобится что-то вроде:
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
вернет строки, которые находятся в файле1, но не в файле2 (строки, пропущенные в файле2).
Я обычно использую meld (это очень полезный инструмент визуального разграничения) для таких сравнений.
Установите meld:
sudo apt-get install meld
Сортировка, а затем сравните:
sort csv1.txt > csv1-sorted.txt
sort csv2.txt > csv2-sorted.txt
meld csv1-sorted.txt csv2-sorted.txt
Я бы попытался использовать sort и diff:
$ diff <(sort csv1.txt) <(sort csv2.txt)
4d3
<
8d6
< /docs/yellow
Если ваш реальный вопрос заключается в том, как сравнить две смонтированные файловые системы, я бы использовал rsync.
См .: Rsync сравнить каталоги? на Unix & amp; Linux
Вы можете использовать -n (--dry-run), чтобы не копировать файлы на самом деле, а выход - различия. Это, по умолчанию, также покажет, является ли один файл более новым, чем другое, то есть изменилось ли содержимое. Я уверен, что он может быть настроен на игнорирование содержимого файла.
Команда comm предназначена для ответа на этот вопрос. Для этого нужно взять два отсортированных файла в качестве ввода, затем вывести три столбца текста: строки, уникальные для файла1, строки, уникальные для файла2, и строки, общие для обоих файлов. Вы можете подавить любой из этих трех столбцов.
В вашем случае вам понадобится что-то вроде:
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
вернет строки, которые находятся в файле1, но не в файле2 (строки, пропущенные в файле2).