如何在不使用临时文件的情况下比较bash中的两个tar文件?
在没有临时工的情况下,我正在努力实现以下目标。档案如何在不使用临时文件的情况下比较bash中的两个tar文件?,bash,Bash,在没有临时工的情况下,我正在努力实现以下目标。档案 #!/bin/bash tar ztf "$1" | sort > tmp1 tar ztf "$2" | sort > tmp2 comm -1 -3 tmp{1,2}|while read line; do echo -e "$1: $line\n"; done comm -2 -3 tmp{1,2}|while read line; do echo -e "$2: $line\n"; done rm tmp{1,2} 没有t
#!/bin/bash
tar ztf "$1" | sort > tmp1
tar ztf "$2" | sort > tmp2
comm -1 -3 tmp{1,2}|while read line; do echo -e "$1: $line\n"; done
comm -2 -3 tmp{1,2}|while read line; do echo -e "$2: $line\n"; done
rm tmp{1,2}
没有tmp文件,如何做到这一点 由于每个临时文件要使用两次,答案几乎肯定是否定的。但是,如果您修改脚本以使用单个命令(例如,
comm
本身,或diff
),则以下操作应能正常工作:
diff <(tar ztf "$1" | sort) <(tar ztf "$2" | sort)
diff由于每个临时文件使用两次,答案几乎肯定是否定的。但是,如果您修改脚本以使用单个命令(例如,comm
本身,或diff
),则以下操作应能正常工作:
diff <(tar ztf "$1" | sort) <(tar ztf "$2" | sort)
diff作为一个次要优化,您可以使用单个comm
调用,并用sed脚本替换相当笨拙的while
循环comm-3一两个sed-e“s/^\t\/$1://;t;s/\\t$/$s/^$2://“| sort
(如果您的sed
没有将\t
解释为制表符,请使用文字制表符)。作为一个次要优化,您可以使用单个comm
调用,并用sed脚本替换相当笨拙的while
循环comm-3一两个sed-e“s/^\t\/$1://;t;s/\\t$/$s/^$2://“|排序
(如果您的sed
没有将\t
解释为制表符,请使用文字制表符)。这一点很有帮助。我几乎可以肯定你把ztf拼错了作为tar的一个选项。我如何使用grep来修改这个结果?@user90100,是的,我修复了输入错误。您可以像在任何其他情况下一样使用grep,即仅使用管道:diff[…]| grep“pattern”
。这一点很有帮助。我几乎可以肯定你把ztf拼错了作为tar的一个选项。我如何使用grep来修改这个结果?@user90100,是的,我修复了输入错误。您可以像在任何其他情况下一样使用grep,即仅使用管道:diff[…]| grep“pattern”
。