unix命令将输出重定向到文件

时间:2015-10-22 10:00:11

标签: unix

我正在尝试编写一个unix命令,它会将输出写入/重定向到一个文件,即如果2个文件存在差异则创建一个文件,否则它将不会创建该文件。

我正在使用下面的命令但它总是创建一个文件(如果没有差异,则为0B),无论文件是否有任何差异。

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

我正在尝试编写一个unix命令来创建文件" diff.tmp"如果" a.txt"不等于" b.txt"别的" diff.tmp"不会被创建。

提前致谢, Pritish

3 个答案:

答案 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

希望它有所帮助!

再见 皮耶罗