Таким образом, утилита Diff работает так же, как я хочу, для 2 файлов, но у меня есть проект, который требует сравнения более чем с 2 файлами за раз, может быть, до 10 за раз. Для этого также необходимо, чтобы все эти файлы располагались рядом друг с другом. Мои исследования на самом деле ничего не дали, vimdiff пока что кажется лучшим со способностью сравнивать 4 за раз.
Мой вопрос: есть ли какая-либо утилита для сравнения более двух файлов за раз или способ взломать diff / vimdiff, чтобы он мог выполнять несколько сравнений? Файлы, которые я буду сравнивать, относительно короткие, поэтому они не должны быть слишком медленными.
Заранее спасибо!
источник
Vim уже умеет это делать:
Но обычно вы ограничены 4 файлами. Однако вы можете изменить это, изменив одну строку в исходном коде Vim. Константа
DB_COUNT
определяет максимальное количество файлов различий , и она определяется в верхней частиdiff.c
в версиях 6.x и более ранних, или примерно на две трети меньшеstructs.h
в версиях 7.0 и выше.источник
diff
имеет встроенную опцию--from-file
и--to-file
, которая сравнивает один операнд со всеми остальными.--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory. --to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory.
источник
Оформление заказа "Beyond Compare": http://www.scootersoftware.com/
Он позволяет сравнивать целые каталоги файлов, и похоже, что он работает и в Linux.
источник
если вы запускаете несколько diff, основанных на одном файле, вы, вероятно, могли бы попробовать написать скрипт, в котором есть цикл for для запуска каждого каталога и запуска diff. Хотя это не было бы рядом, вы хотя бы могли быстро их сравнить. надеюсь, что это помогло.
источник
Не отвечая на главный вопрос, но вот что-то похожее на то, что предложил Бенджамин Нил, но с различием всех файлов:
Сохраните имена файлов в массиве, затем переберите комбинации размера два и diff (или сделайте что хотите).
files=($(ls -d /path/of/files/some-prefix.*)) # Array of files to compare max=${#files[@]} # Take the length of that array for ((idxA=0; idxA<max; idxA++)); do # iterate idxA from 0 to length for ((idxB=idxA + 1; idxB<max; idxB++)); do # iterate idxB + 1 from idxA to length echo "A: ${files[$idxA]}; B: ${files[$idxB]}" # Do whatever you're here for. done done
Производное от @ Карлу-Даффи «s ответ: https://stackoverflow.com/a/46719215/1160428
источник
Есть простой хороший способ сделать это = GREP.
В зависимости от размера текста вы можете скопировать и вставить его или перенаправить ввод файла команде grep. Если вы сделаете grep -vir / path для обратного поиска или grep -ir / path. Это мой способ сдачи сертификационных экзаменов.
источник