Como evitar a necessidade de emitir "y" várias vezes ao remover o arquivo protegido

45

Estou procurando uma solução para ser usada como uma resposta para "rm: remove o arquivo regular protegido contra gravação [x]?"

Eu estava pensando em emitir um personagem seguido de retorno de carro por várias vezes, em bashrc. Como fazemos isso?

    
por Iancovici 18.04.2013 / 13:59

4 respostas

64

Edite com base na pergunta atualizada:

Para evitar ser questionado sobre a remoção de arquivos, adicione a opção -f ("force"):

rm -f /path/to/file

Isso tem um efeito colateral do qual você deve estar ciente: Se algum dos caminhos fornecidos não existir, ele não reportará isso, e ele retornará com sucesso:

$ rm -f /nonexistent/path
$ echo $?
0

Resposta original:

Aqui está uma solução simples:

yes "$string" | head -n $number | tr $'\n' $'\r'

yes repete qualquer string que você fornece infinitamente, separada por novas linhas. head pára após $number times e tr traduz as novas linhas para retornos de carro. Você pode não ver nenhuma saída por causa dos retornos de carro, mas transmiti-lo a esse comando (em bash ) deve ilustrá-lo:

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

Os usuários sem bash podem canalizar o resultado para od , hexdump ou xxd para ver os caracteres reais retornados.

    
por 18.04.2013 / 14:50
5

O outro problema que eu enfrento de tempos em tempos é que rm tem um alias para rm -i , algo assim em / etc / bashrc:

alias rm='rm -i'

Nesse caso você pode unalias rm ou você pode usar este truque que eu descobri anos atrás, colocar uma barra na frente de um comando que tenha sido aliado, para ignorar o alias apenas daquela vez, por exemplo:

\rm somefile

Você pode aprender mais sobre aliases por meio de um artigo em Nixcraft .

    
por 19.04.2013 / 14:43
3

rm é codificado para solicitar "interativamente" (prompt aguardando entrada do usuário) em arquivos protegidos contra gravação. Existem dois métodos para impedir que rm pergunte:

rm -rf somedir

e

rm -r --interactive=never somedir

(ambos também funcionam sem -r ao excluir arquivos em vez de dirs)

explicação:

-f torna rm "ignorar arquivos e argumentos inexistentes, nunca solicitar".

--interactive=never faz o que diz: nunca seja interativo. em outras palavras: nunca avisar.

a diferença entre -f e --interactive=never é esta parte: "ignorar arquivos e argumentos inexistentes".

compare:

$ rm -rf nonexistingname
$ echo $?
0

e

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1

a diferença é principalmente interessante quando se escreve scripts onde você nunca quer que rm seja interativo, mas ainda quer lidar com erros.

Resumo de

: na linha de comando, use rm -rf . nos scripts use rm -r --interactive=never .

    
por 18.04.2018 / 13:09
-1

Eu também encontrei o mesmo problema. A resposta acima é apenas para um arquivo, mas se você quiser ignorar muitos sim.

Você pode usar

sudo rm -r /path/to/directory

para remover todos os arquivos regulares protegidos contra gravação

    
por 05.05.2017 / 14:41