Como posso evitar a execução acidental do comando rm -r *?

7

Ocasionalmente eu uso o comando para excluir alguns arquivos. Por exemplo, o nome pode começar com 'a', então eu vou deletar com o comando rm -r a* , mas não quero remover algum outro diretório por acidente. Como posso bloquear um diretório para evitar exclusão por rm -r ?

    
por john 14.11.2012 / 23:09

4 respostas

5

Você pode codificar o comando rm para rm -i no seu shell, então ele pedirá sua confirmação para cada arquivo.

No entanto, alguns consideram isso prejudicial. Veja alias rm = “rm -i” considerado prejudicial? no Superuser.com

Outros pensamentos estão em Como evito rm -rf acidental? / ? * no StackOverflow.com.

    
por gertvdijk 15.11.2012 / 00:00
2
O melhor conselho é crescer para ter medo e respeitar os comandos 'rm -r' ou 'rm -rf' o suficiente para que, quando você os digita, pare e continue devagar e com cuidado (lendo cuidadosamente o comando poucas vezes). Os comandos são úteis e às vezes precisam ser usados - mas não é uma boa idéia enganar o sistema para salvá-lo desse tipo de erro; não é uma boa ideia se acostumar com essas soluções alternativas - considere construir bons hábitos que possam ser transportados de máquina para máquina.

    
por Daniel 15.11.2012 / 04:22
1

Se você estiver tentando remover itens seletivamente, use find .

find . -name "a*" \! -type d -delete

Você pode verificar o que está excluindo executando:

find . -name "a*" \! -type d -print

Por exemplo, crie alguns diretórios e arquivos:

mkdir -p testDir/a/b 
cd testDir
touch apple.txt banana.txt ant.tx a/antelope.txt a/bus.txt a/b/apostrophe.txt a/b/bug.txt

Para ver os arquivos e diretórios:

find . -name "*" -print

retorna:

.
./a
./a/antelope.txt
./a/b
./a/b/apostrophe.txt
./a/bus.txt
./ant.tx
./apple.txt
./banana.txt

Para verificar o que está sendo excluído:

find . -name "a*" \! -type d -print

retorna:

./a/antelope.txt
./a/b/apostrophe.txt
./ant.tx
./apple.txt

Para excluir os arquivos:

find . -name "a*" \! -type d -delete

Para verificar se apenas arquivos * foram excluídos:

find . -name "*" -print

retorna:

.
./a
./a/b
./a/bus.txt
./banana.txt
    
por mmorris 15.11.2012 / 01:27
1

Além das outras respostas aqui, recomendo que você use mais a conclusão da tabulação e gotejasse menos. Da sua pergunta, parece que você está tentando excluir um único arquivo, mas não quer digitar o nome completo. Nesse caso, em vez de * você deve clicar em Tab . A conclusão da tabulação é muito mais segura.

Se você realmente pretende excluir vários arquivos cujo nome corresponde a um glob, a melhor maneira, como já foi apontado, é pensar duas vezes antes de apertar enter. Além disso, você pode ficar tranquilo se usar uma solução de backup que faça backup de todas as alterações feitas, de modo que sempre possa restaurar qualquer erro sem risco de perda de dados.

    
por Scott Severance 15.11.2012 / 04:47

Tags