Isso * pega os arquivos e diretórios . Para excluir arquivos, apenas tente isto
find /media/d/data/ -maxdepth 1 -type f -delete
Eu tenho um diretório que inclui alguns arquivos e algumas pastas contendo outros arquivos. Estou tentando remover esses arquivos no diretório principal sem tocar nas pastas ou no conteúdo deles.
Estou usando isso
rm /media/d/data/*
ele está funcionando bem e só apaga os arquivos, mas me pergunto por que o terminal exibe esta mensagem:
rm: cannot remove /media/d/data/dd1: Is a directory
e a mesma mensagem aparece para todas as pastas encontradas na pasta principal. Alguém pode explicar? e existe uma maneira de não exibir esta mensagem no terminal?
Por padrão, rm
não exclui diretórios. Se você quiser que os diretórios sejam removidos, use rm -rf
. Se você quiser suprimir a mensagem, use rm <dir> 2>/dev/null
. Note que todas as outras mensagens de erro são suprimidas também.
POSIXly:
find ! -name . -prune -type f -exec rm -f {} +
rm
exclui os arquivos para os quais você diz. *
se expande para todos os arquivos (incluindo diretórios), então você está dizendo rm
para deletar diretórios, o que não fará.
A maioria das shells não tem como excluir diretórios de um padrão curinga. Os padrões de curingas correspondem apenas aos arquivos por nome, não por tipo. Você pode usar find
.
O Zsh tem os qualificadores que podem corresponder arquivos por tipo, data etc. No zsh , você pode usar
rm *(.)
para excluir todos os arquivos regulares ou variantes como rm *(-.)
para excluir arquivos regulares e link simbólico para arquivos regulares, rm *(^/)
para excluir todos os arquivos, exceto diretórios, etc.
Observe também que *
omite arquivos de ponto (arquivos cujo nome começa com .
) . find
irá incluí-los. Em zsh, *
omite arquivos de ponto por padrão; você pode adicionar D
dentro dos parênteses (por exemplo, rm *(.D)
) para incluí-los.
Tags bash files scripting shell-script