-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]
.