这是我的看法:
while read filename; do tar -xOf file.tar "$filename" | grep 'pattern' | sed "s|^|$filename:|"; done < <(tar -tf file.tar | grep -v '/$')
解释如下:
一条条件:如果|
文件名中有OR栏(),则此行将中断。
嗯 实际上,这是一个不错的bash函数,您可以将其附加到.bashrc
文件中:
targrep() {
local Taropt=""
if [[ ! -f "$2" ]]; then
echo "Usage: targrep pattern file ..."
fi
while [[ -n "$2" ]]; do
if [[ ! -f "$2" ]]; then
echo "targrep: $2: No such file" >&2
fi
case "$2" in
*.tar.gz) Taropt="-z" ;;
*) Taropt="" ;;
esac
while read filename; do
tar $Taropt -xOf "$2" \
| grep "$1" \
| sed "s|^|$filename:|";
done < <(tar $Taropt -tf $2 | grep -v '/$')
shift
done
}