Com as ferramentas do GNU, você pode fazer:
find . -type f -exec grep --null -El 'mxprod|nlsoprdc' {} + |
tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -
Embora para esse uso específico de find
, você poderia acabar com ele e usar o grep
do GNU -r
.
grep -r --null -El 'mxprod|nlsoprdc' . |
tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -
Observe que os diretórios nos quais os arquivos encontrados estão não são adicionados como membros do arquivo. Eles serão recriados ao extrair o arquivo, mas não com os metadados originais (propriedade, permissões, ACLs, outros atributos ...) dos originais.
Você poderia resolver isso fazendo:
grep -r --null -El 'mxprod|nlsoprdc' . |
awk -F/ -v RS='find . -type f -exec grep --null -El 'mxprod|nlsoprdc' {} + |
tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -
' -v ORS='grep -r --null -El 'mxprod|nlsoprdc' . |
tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -
' '{
p=""; sep=""
for (i = 1; i < NF; i++) {
p = p sep $i; sep=FS
if (! (p in dirs)) {
print p
dirs[p]
}
}
print}' |
tar --xz -cf /path/to/file.tar.xz --no-recursion --remove-files --null -T -
Embora você veja erros sobre os diretórios que tar
não pode remover porque não estão vazios.
Em qualquer caso, observe que é perigoso se, por exemplo, o sistema de arquivos ficar cheio, xz
poderia falhar ao gravar a saída de um determinado arquivo depois que tar
já o tenha removido.
Pode ser melhor começar a remover arquivos somente depois de ter certeza de que o arquivo foi criado corretamente.