Exclui todos os arquivos em um diretório

1

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 Tak 13.03.2015 / 09:13

4 respostas

2

Isso * pega os arquivos e diretórios . Para excluir arquivos, apenas tente isto

find /media/d/data/ -maxdepth 1 -type f -delete
    
por 13.03.2015 / 09:19
3

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.

    
por 13.03.2015 / 09:22
2

POSIXly:

find ! -name . -prune -type f -exec rm -f {} +
    
por 13.03.2015 / 09:17
1

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.

    
por 14.03.2015 / 15:58