2015-10-22 2 views
2

Я пытаюсь написать команду unix, которая будет писать/перенаправлять вывод в файл. I.e создать файл, если есть разница в 2 файлах, иначе он не будет создавать файл.unix-команда для перенаправления вывода в файл

Я использую команду ниже, но он всегда создает файл (из 0B, если нет diff), независимо от того, есть какая-либо разница в файле или нет.

diff -u -w a.txt b.txt > diff.tmp 

Я пытаюсь написать одну команду Unix, которая будет создавать файл «diff.tmp» если «a.txt» не равно не будет создан «b.txt» еще «diff.tmp» ,

Спасибо заранее, Pritish

+0

Вы должны либо удалить файл позже, в случае, если она пуста; или проверить соответствие между файлами «a.txt» и «b.txt» перед перенаправлением чего-либо на «diff.txt». – Rubens

ответ

2

В Баш вы можете удалить его впоследствии:

diff -u -w a.txt b.txt > diff.tmp && if [ -f diff.tmp ] && [ ! -s diff.tmp ]; then rm diff.tmp; fi 

Примечание:

  • -f: проверить, если файл выходит (-e, чтобы проверить, файл, каталог и т. д.)
  • -s: to проверьте, не является ли файл ненулевым.
1

Однако он может работать для текстовых файлов .. вы также можете использовать команду cmp.

cmp a.txt b.txt > cmp.tmp && if [ -f cmp.tmp ] && [ ! -s cmp.tmp ]; then rm cmp.tmp; fi 
1

Вы можете проверить код возврата. От человека страницы:

Exit status is 0 if inputs are the same, 1 if different, 2 if trouble. 

Так что я бы написать что-то вроде:

#!/bin/bash 
diff "$1" "$2" 2>/dev/null 1>/dev/null 
if [[ $? -eq 0 ]];then 
echo "No diff found!" 
else 
echo "Diff saved in file "$3 
diff $1 $2 > $3 
fi 

И тогда вы называете это как

./diff.sh a.txt b.txt diff.tmp 

Надеется, что это помогает!

Bye Piero

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