-Z é a saída de um NUL após cada nome de arquivo com grep -l , para não alterar as novas linhas para NULs nas linhas que ele gera. Portanto, xargs -0 vê apenas um registro enorme (com vários caracteres de nova linha), já que não há delimitado por NUL, sendo apenas um argumento para passar para rm e provavelmente maior que o tamanho máximo de um argumento (128kB no Linux ) e de qualquer forma não existe tal arquivo chamado ...ffd7ba85b0577b90c0fb1b3922303c486127d4<newline>...fff0b6886aff6cb4073742fbf7bcc1b47d9b45 .
Faça simplesmente:
rm [0-9a-f][0-9a-f]*
Ou se a lista for muito grande:
printf '%sautoload zargs # best in ~/.zshrc
setopt extendedglob # ditto
zargs [0-9a-f](#c2)* -- rm
' [0-9a-f][0-9a-f]* | xargs -r0 rm
Ou com zsh :
command -x rm {2}([0-9a-f])*
Ou com ksh93 :
find . ! -name . -prune -name '[0-9a-f][0-9a-f]*' -exec rm {} +
Ou:
rm [0-9a-f][0-9a-f]*
Tenha em atenção que, nas regiões não-C, [a-f] pode corresponder a mais do que [abcdef] .