Команда Diff для сравнения файлов, находящихся только в первом каталоге

У меня есть 2 папки, содержимое которых я хочу сравнить. Например, у меня есть папка 1 и папка 2. В папке 2 есть много новых файлов + некоторые файлы, такие как папка 1, но с некоторыми изменениями в содержимом этих файлов. Теперь я хочу сравнить папку 1 и папку 2, чтобы получить список файлов папки 1, которые были изменены или отсутствуют в папке 2.

Когда я запускаю следующую команду:

diff --brief -r folder1/ folder2/ > diff.txt
[d2 ] Он также дает мне список новых файлов в папке 2.

Я хочу сравнить папку 1 и папку 2, чтобы получить список только тех файлов папки 1, которые отсутствуют или изменены в папке 2.

Как я могу это достичь?

Пожалуйста, не рекомендуем Meld, я уже пробовал, и это не поможет. Я понял, командная строка будет быстрее.

UPDATE

find folder1 -type f -exec diff --brief --from-file=folder2 {} +

не дает мне полный путь к файлу с разными / отсутствующими файлами.

1
задан 27 February 2017 в 09:46

1 ответ

Опция --from-file может быть полезна:

$ diff -r --brief foo bar
Files foo/a and bar/a differ
Files foo/b and bar/b differ
Files foo/c and bar/c differ
Only in bar: d
$ diff --brief --from-file=bar foo/*
Files bar/a and foo/a differ
Files bar/b and foo/b differ
Files bar/c and foo/c differ

Итак, в вашем случае это будет:

diff --brief --from-file=folder2 folder1/*

Также есть опция --unidirectional-new-file :

--unidirectional-new-file
      treat absent first files as empty

С его помощью:

$ diff /tmp/foo/ /tmp/bar -r --brief --unidirectional-new-file
Files /tmp/foo/a and /tmp/bar/a differ
Files /tmp/foo/b and /tmp/bar/b differ
Files /tmp/foo/c and /tmp/bar/c differ
2
ответ дан 23 May 2018 в 02:59
  • 1
    ваша команда дает ошибку для всех файлов, которые находятся только в 1 папке, не указав такой путь. Чтобы выполнить командную работу, мне нужно удалить * после папки1 /. Тогда это дает мне только первый уровень разницы в дереве каталогов. Если я запустил его с -r, он больше не отображает форматированный вывод, например «Common subdirectories». , и т.д. – Reena Parekh 27 December 2016 в 16:01
  • 2
    Если у вас есть вложенные каталоги, попробуйте что-то вроде find folder1 -type f -exec diff --brief --from-file=folder2 {} + – muru 27 December 2016 в 16:05
  • 3
    @ReenaParekh Я не понимаю вашу отредактированную команду. Измените свой пост, чтобы включить четкий набор входных данных и ожидаемого результата. – muru 27 December 2016 в 16:06
  • 4
    @ReenaParekh также видит обновление с помощью --unidirectional-new-file – muru 27 December 2016 в 16:09

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

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