Więc narzędzie Diff działa tak, jak chcę dla 2 plików, ale mam projekt, który wymaga porównań z więcej niż 2 plikami naraz, może do 10 na raz. Wymaga to również umieszczenia wszystkich tych plików obok siebie. Moje badania tak naprawdę nic nie pokazały, vimdiff wydaje się być najlepszy z dotychczasowymi możliwościami porównywania 4 na raz.
Moje pytanie: czy istnieje narzędzie do porównywania więcej niż 2 plików naraz lub sposób na zhakowanie diff / vimdiff, aby można było dokonać wielu porównań? Pliki, które będę porównywać są stosunkowo krótkie, więc nie powinno to być zbyt wolne.
Z góry dziękuję!
źródło
Vim może już to zrobić:
Ale zwykle jesteś ograniczony do 4 plików. Możesz to jednak zmienić, modyfikując pojedynczą linię w źródle Vima. Stała
DB_COUNT
definiuje maksymalną liczbę plików różnicowych i jest zdefiniowana u górydiff.c
w wersjach 6.xi wcześniejszych lub około dwóch trzecich w dółstructs.h
w wersjach 7.0 i nowszych.źródło
diff
ma wbudowaną opcję--from-file
i--to-file
, która porównuje jeden operand ze wszystkimi innymi.--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.
źródło
Checkout „Beyond Compare”: http://www.scootersoftware.com/
Pozwala porównać całe katalogi plików i wygląda na to, że działa również w systemie Linux.
źródło
jeśli uruchamiasz wiele różnic w oparciu o jeden plik, prawdopodobnie możesz spróbować napisać skrypt, który ma pętlę for, aby przejść przez każdy katalog i uruchomić różnicę. Chociaż nie byłoby to obok siebie, można by je przynajmniej szybko porównać. mam nadzieję, że pomogło.
źródło
Nie odpowiadam na główne pytanie, ale oto coś podobnego do tego, co zasugerował Benjamin Neil, ale różni się wszystkie pliki:
Przechowuj nazwy plików w tablicy, a następnie zapętlaj kombinacje rozmiaru dwa i diff (lub zrób, co chcesz).
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
Pochodzi z odpowiedzi @ charles-duffy : https://stackoverflow.com/a/46719215/1160428
źródło
Jest na to prosty, dobry sposób = GREP.
W zależności od rozmiaru tekstu możesz go skopiować i wkleić lub możesz przekierować wejście pliku do polecenia grep. Jeśli utworzysz grep -vir / path w celu wykonania wyszukiwania wstecznego lub grep -ir / path. To jest mój sposób na egzaminy certyfikacyjne.
źródło