Como parte de um script de implantação, desejo despejar algumas coisas em cache do meu diretório temporário. Eu uso um comando como:
rm /tmp/our_cache/*
No entanto, se /tmp/our_cache
estiver vazio (bastante comum ao enviar muitas alterações em rápida sucessão ao nosso servidor de teste), isso imprimirá a seguinte mensagem de erro:
rm: cannot remove `/tmp/our_cache/*': No such file or directory
Não é grande coisa, mas é um pouco feio e quero reduzir a taxa de ruído / sinal na saída deste script.
O que é uma maneira concisa no unix de excluir o conteúdo de um diretório sem receber mensagens reclamando que o diretório já está vazio?
Editar 1
removido "- tipo f
Editar 2
Adicionada opção não padrão
-mindepth 1
para impedir que o diretório raiz da pesquisa seja removido (após remover a-type f
limitação).fonte
-type f
, pois pode haver diretórios temporários, bem como (embora o exemplo na questão não conta para eles, então eles provavelmente não está lá ...)-type f
excluirá apenas arquivos regulares; portanto, links simbólicos, por exemplo, não serão excluídos./tmp/our_cache
assim você também pode fazerrm -r /tmp/our_cache
. Enquanto estiver usando opções fora do padrão, você poderá usar-mindepth 1
. Observe querm /tmp/our_cache/*
, ao contrário , também remove subdiretórios e seu conteúdo e arquivos ocultos.Você pode redirecionar o erro padrão para
/dev/null
para que ele não imprima issofonte
Outra maneira (embora um pouco exagerada ...):
isso usa
test
ou[
para testar se a sequência retornada da execução de umls
em seu diretório não está vazia. Então, se, e somente se, essa sequência NÃO estiver vazia, ela removerá tudo do seu diretório.OBSERVAÇÃO: deixar a glob fora do sistema
ls
suprimirá o erro de nenhum arquivo.fonte
Se o seu script estiver usando o BASH, você pode tentar:
Isso ainda produzirá um erro se houver um problema "real" ou se um arquivo estiver protegido (você precisará do
-f
modificadorrm
para excluir esse tipo de arquivo), mas evitará o erro quando não houver arquivos.Se você usar outro shell que não o BASH para seus scripts, como zsh, ksh, poderá tentar esta outra sintaxe que pode ser mais portátil:
fonte