我正在尝试编写一个unix命令,它会将输出写入/重定向到一个文件,即如果2个文件存在差异则创建一个文件,否则它将不会创建该文件。
我正在使用下面的命令但它总是创建一个文件(如果没有差异,则为0B),无论文件是否有任何差异。
diff -u -w a.txt b.txt > diff.tmp
我正在尝试编写一个unix命令来创建文件" diff.tmp"如果" a.txt"不等于" b.txt"别的" diff.tmp"不会被创建。
提前致谢, Pritish
答案 0 :(得分:2)
在bash中,您可以在之后删除它:
diff -u -w a.txt b.txt > diff.tmp && if [ -f diff.tmp ] && [ ! -s diff.tmp ]; then rm diff.tmp; fi
注意:
-f
:检查文件是否退出(-e
以检查文件,目录等是否存在)-s
:检查文件是否为非零答案 1 :(得分:1)
但是可以用于文本文件..你也可以使用cmp命令。
cmp a.txt b.txt > cmp.tmp && if [ -f cmp.tmp ] && [ ! -s cmp.tmp ]; then rm cmp.tmp; fi
答案 2 :(得分:1)
你可以查看diff的返回码。从手册页:
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
希望它有所帮助!
再见 皮耶罗