Como usar o sudo para deletar o conteúdo de um diretório

4

Eu tenho uma necessidade legítima de esvaziar um diretório para o qual minha conta não tem acesso (é um diretório de cache usado por um aplicativo e é de propriedade da conta que executa o aplicativo.) Minha conta tem sudo privilégios (eu acho), mas não consigo descobrir como excluir o conteúdo do diretório em questão. Minha conta não pode cd no diretório, apenas no diretório pai.

sudo rm directory/*

dá a resposta

cannot remove 'directory/*': no such file or directory

Este parece ser um problema que deve ter uma resposta simples, mas não consigo encontrá-lo.

Editar: O diretório em questão definitivamente não está vazio:

sudo ls directory/

retorna mais de 1000 nomes de arquivos.

    
por Dave Mulligan 23.10.2014 / 20:52

2 respostas

11

Você está tendo problemas porque seu shell está tentando expandir * na lista de arquivos, mas não pode, pois você não tem permissão para ler o diretório.

Posso pensar em duas coisas que funcionariam

sudo bash -c "rm directory/*"

Neste caso, o * não é expandido por você, mas pelo usuário root, que pode ler o diretório

OR

sudo find directory -type f -exec rm {} \;

O texto acima somente excluirá arquivos, não diretórios (caso contrário, excluirá directory junto com seu conteúdo), mas parecerá menos propenso a erros.

Edit: Na primeira opção, eu escrevi acidentalmente o diretório. * em vez do diretório / *

    
por 23.10.2014 / 21:01
-1

Qualquer vez em que você vai sudo rm , você deve considerar seriamente o que está fazendo se não estiver usando caminhos explícitos.

sudo rm /explicit/path/to/directory/* deve funcionar. Você ainda receberá esse erro se não houver arquivos em directory ; você pode suprimir isso com rm -f ( não rm -fr a menos que você esteja absolutamente certo do que você está fazendo).

    
por 23.10.2014 / 21:41