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