Dependendo da sua versão de grep , isso pode esperar para sempre porque você não deu um nome de arquivo (ou diretório) como argumento; O comportamento de grep para usar o diretório de trabalho atual quando -r é especificado é um recurso bastante novo. Assim, se a sua versão for mais antiga, essa sua chamada poderá aguardar para sempre a entrada em stdin . Basta adicionar . como último argumento a grep para evitar este caso.
Para evitar problemas com nomes de arquivos (o que não deve ser um problema neste caso), seria mais seguro chamar
grep -Zl -r 'Undelivered' . | xargs -0 rm --
Dessa forma, grep exibe os nomes de arquivos correspondentes de zero bytes ( ' ) separados, o que evita problemas com espaços e similares em nomes de arquivos. --'rm informa - para não tratar os argumentos a seguir como opções, ou seja, se um nome de arquivo começar com -v , ele não será quebrado.
Para ver se esse comando faz alguma coisa, você pode adicionar a opção rm a rm , para ver se -- realmente remove algo (na frente de %code% , é claro).