Я пытаюсь найти diff
s между всеми файлами с одинаковыми именами в двух копиях каталога (скажем, рабочая и резервная копия). Например, я могу diff
два файла с одинаковыми именами в обоих:
> diff d1/f.cpp d2/f.cpp
или я могу найти различия по каталогам:
> diff d1 d2
но как найти различия только между *.cpp
файлами?
> diff d1/*.cpp d2/*.cpp
не похоже на работу (по понятным причинам).
[Вероятно, это легко решить с помощью циклов, но я пытаюсь найти более элегантный способ]
echo "${file##*/}";
передdiff
командой, поэтому вы знаете, какие файлы на самом деле сравниваются. Кроме того, как упоминалось в ответе @ Rinzwind, этот метод не охватывает случай, когда список файлов не совпадает в обоих каталогах.diff -qr {DIR1} {DIR2}
делает все файлы в обоих каталогах.q
показывает только различияr
делает рекурсивный Оставьте это, если вам это не нужноВы не можете сказать
diff
напрямую использовать подстановочные знаки, но вы можете добавить:исключить файлы. Поэтому, если вам нужен только
*.cpp
самый простой способ, это создать текстовый файл, в котором перечислены все файлы, которых нет*.cpp
. Вы можете сделать это с помощью следующей команды:ls -I "*.cpp" > excluded_files
где-I "*.cpp"
аргумент игнорирует все файлы .cpp. Обратите внимание, что кавычки необходимы.источник
Через некоторое время после того, как я задал вопрос, я обнаружил
meld
утилиту diff и с тех пор пользуюсь ею. Это отличная программа на основе графического интерфейса, которая делает сравнение и объединение файлов и каталогов очень простой задачей. Это делает двух- или трехстороннее сравнение.В частности, он отвечает на мой первоначальный вопрос в том, что он показывает сравнение содержимого каталога в цветовой кодировке и позволяет сравнивать конкретные файлы двойным щелчком по имени файла.
Если нужно более чем трехстороннее сравнение, то
gvimdiff
(на основеvim
редактора) это тоже отличный вариант, который обеспечивает эту функциональность.источник
Для этого есть легкое решение:
diff dir1 dir2 | vim -R -
на оболочкеЭто добавит сгибы и параллельное сравнение для измененных файлов.
источник