我有一个非常大的tar存档〜5GB。
我想在存档中的所有文件上使用grep表示一种模式(并打印具有模式的文件的名称),但不想通过提取存档来填充磁盘空间。
无论如何我能做到吗?
我尝试了这些,但这并没有给我包含模式的文件名,只是匹配的行:
tar -O -xf test.tar.gz | grep 'this' tar -xf test.tar.gz --to-command='grep awesome'
tar的此功能还记录在哪里?tar xf test.tar $ FILE
这是我的看法:
while read filename; do tar -xOf file.tar "$filename" | grep 'pattern' | sed "s|^|$filename:|"; done < <(tar -tf file.tar | grep -v '/$')
解释如下:
while read filename; do
tar -xOf file.tar "$filename"
| grep 'pattern'
| sed "s|^|$filename:|";
done < <(tar -tf file.tar | grep -v '/$')
while read
一条条件:如果|文件名中有OR栏(),则此行将中断。
|
嗯 实际上,这是一个不错的bash函数,您可以将其附加到.bashrc文件中:
.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 }