Да, для этой цели можно использовать diff
. Это так же просто, как:
diff -rq dir1 dir2
Опция -r
сообщает diff
также рекурсивно обращаться к подкаталогам -. Параметр -q
указывает diff
сообщать только о различиях в файлах.
Эти две опции я обычно использую, когда хочу узнать, какие файлы находятся в dir1
, а какие нет в dir2
, и наоборот. (Вы также можете отбросить параметр -r
, если вы не хотите рекурсивно обращаться к подкаталогам -, а рассматриваете только непосредственное содержимое двух каталогов.)
Обратите внимание, что это покажет вам как файлы, которые существуют в dir1
, но не в dir2
, так и файлы, которые существуют в dir2
, но не в dir1
, например.:
$ diff -rq /tmp/dir1/ /tmp/dir2/
Only in /tmp/dir1/: file1
Only in /tmp/dir2/: file2
Only in /tmp/dir2/: file3
Если вам нужно только одно из направлений (, например, файлы, которые находятся в dir1
, но не в dir2
), и получить список имен файлов только (без помех "Только в..." ), вы, конечно, можете попытаться массировать вывод diff
с помощью grep
, sed
, awk
и т.п., но в этом случае лучше вообще не использовать diff
. и вместо этого используйте решение Stéphane Chazelas.
Вопрос двоякий:
в контексте, ориентированном на строку -, .
соответствует любому символу -, включая,
вы использовали флаг g
, который говорит sed сделать как можно больше замен в строке
, поэтому он соответствует всем не -перекрывающимся последовательностям из шести символов, которые ограничены запятыми.
Для вашего примера данных должно быть достаточно сбросить флаг g
, чтобы была заменена только первая совпадающая последовательность -, однако вы также должны подумать о замене .
чем-то более конкретным, например[^,]
(any символ кроме запятой )или[0-9]
(любая из латинских десятичных цифр ).