O problema aqui é que o padrão globbing de nomes de arquivo na linha de comando será expandido pelo shell (se corresponder a quaisquer nomes no diretório atual) antes que o utilitário seja chamado.
Isso significa que o comando real que está sendo executado pode ser algo como
find . ! -name thing1-custom.conf thing2-custom.conf thing3-custom.conf -delete
Você pode ver isso se ativar o rastreio com set -x
na linha de comandos antes de chamar o comando. Use set +x
para depois desativar o rastreamento.
Seu comando também deve ter fornecido uma das mensagens de erro unknown option
ou paths must precede expression
, dependendo da implementação do utilitário find
.
A coisa certa a fazer aqui é citar o padrão da casca, como Michael Homer apontou nos comentários (ele diz para escapar do *
, mas citando todo o padrão é IMHO mais bonito e tem o mesmo efeito) :
find . ! -name '*custom.conf' -delete
Dessa forma, o padrão é passado para find
como está, e o utilitário fará sua própria correspondência com todos os nomes no diretório atual.
Eu também adicionaria -type f
para que, assim, tenhamos certeza de que agimos apenas em arquivos regulares:
find . -type f ! -name '*custom.conf' -delete