2013-09-19 3 views
0

Я работаю над тестированием файлов, сравнивая их, и мне было интересно:Неужели Diff заботится о имени файла?

Помогает ли команда diff в bash заботиться о имени файла? Вот мой пример:

У меня есть файл:

shswitch_313083_126.138.36.253_11894 

И еще одно:

MP-313083-Sw1-126.138.36.253 

Они содержатся одни и те же вещи. Когда я делаю это:

if diff $LOCALDIR'/liste/'$filename $DIR'/working-dir/shswitch_'$codesite'_'$ip'_'*'_OUTPUTCONFIG' >/dev/null ; then 

Diff возвращает меня что-то отличное от/разработчика/нуль Таким образом, делает различий заботится о имени файла? Или есть проблемы с моим кодом? Что я должен использовать для возврата, содержат ли файлы одни и те же вещи, не заботясь о именах файлов?

+0

Что вы пытаетесь сделать? 'diff' * не * и, вероятно, * никогда *, заботится о именах файлов. – devnull

+0

Я пытаюсь перезаписать второй файл, если содержит его совпадение. –

ответ

1

Если вы хотите просто проверить, являются ли два файла являются одинаковыми или различными, вы можете сказать:

diff -q file1 file2 > /dev/null && echo "Files are identical" || echo "Files differ" 

Использование -q сообщит только ли файлы отличаются или нет.

Чтобы выполнить действие, если файлы различны, скажем:

diff -q file1 file2 > /dev/null || some_command 
+0

Ну, это в программе, и у меня есть 2 случая, если они разные: Перезаписать файл2 с файлом1 Если это не так, просто обновите базу данных. Так что, в основном, мне нужна опция -q? –

1

diff определенно не заботится о имени файла. Он возвращает 0, если содержимое файла идентично, иначе оно возвращает 1, если есть другие различия, и 2, если какой-либо файл не существует. Кстати, программа никогда не возвращает /dev/null, это не имеет смысла.

+0

Не так ли/dev/null использовать в моем «if»? –

+0

В приведенном фрагменте кода вывод стандартного вывода 'diff' перенаправляется (с символом'> ') на'/dev/null', так как возможные различия не имеют отношения к вашей проблеме. Как отметил @devnull, вы достигнете того же результата, используя переключатель '-q' (который обозначает вывод _quiet_). Так что да, продолжайте использовать '-q'or'>/dev/null', но не ошибайтесь: это не имеет никакого отношения к коду, возвращаемому' diff'. В вашем случае вам будет лучше с чем-то 'if diff -q file1 file2; затем # ... blah different; else # ... blah not diff ...; fi' – phep

+0

Я использовал то, что сказал Девнулл, а не иначе. он работает :) спасибо, ребята –

Смежные вопросы