linux diff только для вывода имени файла и ничего больше - PullRequest
1 голос
/ 27 февраля 2012

Я пытаюсь заставить diff выводить только имя измененных файлов.Я пытался использовать опцию -q, но она все еще дает мне слишком много выходных данных:

Теперь я получаю следующее:

files path/to/file1/file1 and path/to/file2/file2 are different

И мне бы хотелось:

path/to/file1/file1

Есть идеи, как это сделать?

Ответы [ 5 ]

3 голосов
/ 27 февраля 2012

Вы можете сделать: diff -q file1 file2 | cut -f2 -d' '

3 голосов
/ 27 февраля 2012

Использовать статус выхода diff:

if ! diff -q file1 file2 >/dev/null; then echo file1; fi
1 голос
/ 27 февраля 2012

Другой вариант - использовать cmp --silent вместо diff -q.Это ничего не отправляет в stdout, поэтому вам нужно иметь дело только со статусом выхода.

Например:

file1=path/to/file1/file1; cmp --silent $file1 path/to/file2/file2 || echo $file1

Статус выхода cmp такой же, как diff (0, если входыто же самое и 1, если отличается).

1 голос
/ 27 февраля 2012

Аналогично ответу Уэса:

echo "files path/to/file1/file1 and path/to/file2/file2 are different" | sed -e "s/^files //" -e "s/ and .*$//"

.

//output 
path/to/file1/file1
1 голос
/ 27 февраля 2012

Вы всегда можете передать это чему-то другому, например:

# diff ... | sed 's/^files //;s/ and .*//;'

Тем не менее, обратите внимание, что если у вас есть файл с литералом «и», то вышеописанное вызовет проблему. Обычно я призываю людей не использовать пробелы в именах файлов в любом случае. Да, вы можете сделать это, но да, это все еще вызывает проблемы.

...