Tornar a localização bem-sucedida mesmo se não houver arquivos correspondentes

2

Estou usando find em um script bash para limpar alguns arquivos em cache com mais de um dia:

find /tmp/my_files_*.cache -mtime +1 -delete

O problema é que, se o comando não corresponder a nenhum arquivo, ele falhará, impedindo que o restante do script seja executado:

find: '/tmp/my_files_*.cache': No such file or directory

Atualmente estou trabalhando em torno dele anexando || true ao comando, mas isso é sub-ótimo, pois o erro ainda aparece na saída e permite que o script continue após qualquer outro erro que find possa lançar.

Como posso dizer a find que está tudo bem se nenhum arquivo for compatível?

    
por Tamlyn 26.08.2016 / 12:39

3 respostas

1

Com o comando original, não é find que não corresponde a nada, exceto ao shell.

Ou seja, quando você corre

find /tmp/my_files_*.cache -mtime +1 -delete

Se houvesse arquivos correspondentes, a funcionalidade globbing do shell expandia esse curinga e a invocação find real seria algo como:

find /tmp/my_files_1.cache /tmp/my_files_2.cache /tmp/my_files_3.cache -mtime +1 -delete

(isso pode facilmente se tornar um comando muito muito , que em alguns casos pode ser um problema em si)

Quando não há correspondências, o curinga é passado como está, portanto, a invocação find seria semelhante:

find /tmp/my_files_*.cache -mtime +1 -delete

e se comportando como a maioria dos programas find não faz nenhum tipo de expansão curinga por conta própria para o (s) argumento (s) do caminho, por isso tenta encontrar um arquivo / diretório que seja literalmente denominado /tmp/my_files_*.cache .

Como foi apontado por Ipor Sircer, a maneira mais idiomática de usar find é dar a ele o (s) caminho (s) base (s) e deixar find procurar o conteúdo do diretório e aplicar filtros conforme necessário.

Algo como isso deve corresponder ao que você estava tentando fazer:

find /tmp -maxdepth 1 -name "my_files_*.cache" -mtime +1 -delete
    
por 26.08.2016 / 23:33
2
find /tmp -name "*.cache" -mtime +1 -delete
    
por 26.08.2016 / 12:42
-1

Se você não se importa se há algum arquivo para excluir ou não, não se preocupe em testar o sucesso ou não, apenas jogue fora qualquer erro:

encontre /tmp/my_files_*.cache -mtime +1 -delete 2 > / dev / null

    
por 26.08.2016 / 23:03