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

用于将输出重定向到文件的unix命令,unix,Unix,我正在尝试编写一个unix命令,该命令会将输出写入/重定向到一个文件,即,如果两个文件存在差异,则创建一个文件,否则不会创建该文件 我正在使用下面的命令,但它总是创建一个文件(如果没有差异,则为0B),无论文件中是否存在任何差异 diff -u -w a.txt b.txt > diff.tmp 我正在尝试编写一个unix命令,如果“a.txt”不等于“b.txt”,将创建文件“diff.tmp”,否则将不会创建“diff.tmp” 提前感谢,, Pritish在bash中,您可以在之后

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

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

diff -u -w a.txt b.txt > diff.tmp
我正在尝试编写一个unix命令,如果“a.txt”不等于“b.txt”,将创建文件“diff.tmp”,否则将不会创建“diff.tmp”

提前感谢,,
Pritish

在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
    :检查文件是否为非零

但是,can将适用于文本文件。您也可以使用cmp命令

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

您可以从手册页检查差异的返回代码:

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
希望有帮助

再见
Piero

您要么稍后删除该文件,以防该文件为空;或者在将任何内容重定向到“diff.txt”之前,测试文件“a.txt”和“b.txt”之间的匹配