Shell命令来过滤pipe道中不存在的文件

我正在寻找一个很好的方法来产生一个备份tar.gz的东西会被提取另一个tar.gz覆盖。

tar -ztf patch.tar.gz | grep -v "/$" | tar -T- -zcvf backup.tar.gz 

这完美的作品! 然而,有时候,新的补丁(patch.tar.gz)不仅包含已经存在于HDD中的文件,而且还可能添加不存在的新文件。 这些不存在的文件将无法备份,第二个tar会产生错误。 退出代码是2

tar:folder / file.txt:不能stat:没有这样的文件或目录
tar:由于之前的错误而退出失败状态

我正在寻找shell命令只检查文件存在(标准input)和发送现有文件的标准输出。 它存在吗? 我需要这样的东西:

 tar -ztf patch.tar.gz | grep -v "/$" | filterfileexist | tar -T- -zcvf backup.tar.gz 

我需要一个shell命令而不是一个shell脚本。
很明显,我可以用C语言来实现这个shell命令,因为它非常简单,但是我希望find一些在其他UNIX平台上可以find的通用命令。

尝试使用perl oneliner这个

喜欢

 cat filelist | perl -ne 'chomp(); if (-e $_) {print "$_\n"}' | tar -T- -zcvf backup.tar.gz 

这里有几个select。

tar -ztf patch.tar.gz | grep -v“/ $”| xargs -i sh -c'test -f {} && echo {}'| tar -T- -zcvf backup.tar.gz

要么

tar -ztf patch.tar.gz | grep -v“/ $”| tar –ignore-failed-read -T- -zcvf backup.tar.gz

第二个例子在尝试备份一个不存在的文件(在Centos6.5上testing)之后将退出状态为零,这样可以避免这个问题。