Qual é a melhor maneira de excluir arquivos gerados automaticamente de uma pasta, sabendo que a pasta pode incluir arquivos criados manualmente para não serem excluídos? [fechadas]

2

Isso pareceu ótimo: find . ! -name *custom.conf -delete

Mas isso não funciona se eu não tiver nenhum custom.conf: (

Estou pensando em:

  • dividido em 2 pastas
  • use um regex no comando find

aviso de isenção de responsabilidade: esta é a minha primeira pergunta aqui, achei que poderia ter sido melhor adicionar um comentário ao link mas eu não tenho a reputação necessária para postar um comentário

    
por user247207 19.08.2017 / 07:17

1 resposta

1

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
    
por 19.08.2017 / 12:23

Tags