Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用临时文件的情况下比较bash中的两个tar文件?_Bash - Fatal编程技术网

如何在不使用临时文件的情况下比较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”