Remover arquivo sem perguntar


89

Como posso remover um arquivo sem perguntar ao usuário se ele concorda em excluir o arquivo? Estou escrevendo um shell script e uso a função rm, mas ele pergunta "remover arquivo regular?" e eu realmente não preciso disso. Obrigado.


5
rm -f, yes | rmE assim por diante, mas esta pertence a SU.

4
rmnão mostra um "remover arquivo normal?" prompt por padrão. Você deve ter o alias rm -iou definido como uma função. Estou surpreso que o alias esteja visível dentro do seu script. Você está executando o script ( ./foo.sh) ou adquirindo ( . foo.shou source foo.sh)?
21411 Keith Thompson

Respostas:


103

Você pode ter um rmalias para rm -itentar o seguinte:

/bin/rm -f file.log

Para ver seus aliases, você pode executar alias.


7
Alternativamente, usar command rm ...ou \rm ...para ignorar o alias / função
Glenn Jackman

6
Argumenta-se que ter rmalias rm -ié uma má ideia. O rmcomando, por padrão, remove silenciosamente o arquivo nomeado. Ao rm -iusar o alias , você pode adquirir o hábito de não verificar cuidadosamente antes de pressionar Enter, dependendo do prompt interativo para salvá-lo. Então você digita rm some-important-fileem um ambiente sem o alias.
Keith Thompson

@Keith Isso é muito verdadeiro, eu só pessoalmente apelido rm para rm -v
chown

1
Se "rm" é uma função (em vez de um alias), esta resposta deve funcionar. E a festa unsetde comando pode ser interessante
Xen2050

56

O sinalizador de força remove todos os prompts;

rm -f {file}


2
É isso que estou procurando, não a resposta aceita.
gsamaras

30

Que a força esteja com você - rm -f


5
Eu já votei positivamente na resposta dos linces, e isso é exatamente o mesmo. Apenas upvoting para o senso de humor
rain_

Votei tanto no comentário quanto na resposta, apenas porque alguém achou um senso de humor no SO ...
Mac

5

Dentro de um script de shell, você gostaria de usar, rm -f <filename>mas também tem a opção de se livrar da -iopção implícita para o seu ambiente, inserindo unalias rmseu shell (ou perfil).


unalias rmnão funciona no CentOS? Amazon Linux?
Suncatcher

5

o yesprograma responde repetidamente yes a quaisquer prompts. para que você possa inseri-lo no rmprograma interativo para obter o efeito desejado também.

yes | rm <filename>

por outro lado, se você não quiser fazer algo interativo, poderá fazer

yes n | <something interactive>

e isso repetirá 'n' no fluxo de entrada (respondendo efetivamente não a perguntas)


A yes nopção não está funcionando para mim. Enquanto eu uso yes n | rm file.txt, ele realmente remove o arquivo, mesmo que o arquivo esteja protegido corretamente.
Izmilind 08/12

5

Se você possui as permissões necessárias para excluir o arquivo e não deseja ser solicitado, faça o seguinte (-f = force):

rm -f file

Se você não tiver permissões para o arquivo, precisará usar:

sudo rm -f file

1
O "remover arquivo regular?" O prompt implica que não é um problema de permissões.
21811 Keith Thompson

4
\rm file

A barra invertida \ignora os aliases.


1
"\" é uma barra invertida, o que você quer dizer?
Cand3r

Sim, é necessário usar rm sem aliases, resultando em prefixos de diálogos de confirmação indesejados com \.
Teknopaul 2/08

1

Além de usar o -fparâmetro, como alternativa, você pode usar o findcomando, por exemplo

find -name file.log -delete

0

Atualmente, estou trabalhando em um sistema em que o shell bash recebeu a definição do comando rm como uma função em um dos arquivos de configuração global:

 rm  () { /bin/rm -i ${1+"$@"}; }

Portanto, nenhuma das respostas acima sobre aliases funcionou. Para combater o comportamento irritante, desative a função rm no meu arquivo .bashrc

 unset -f rm

Eu tive um problema semelhante ao do abridor. No entanto, não encontrei nenhuma resposta que mencionasse a possibilidade rmoculta por uma função shell. Então eu adicionei a resposta aqui na esperança de que seria de ajuda para alguém que enfrenta o mesmo tipo de problema.

Digitar /bin/rmou rm -fo tempo todo é inconveniente e pode ter más consequências (no caso de rm -f).


Isso pode ter resolvido o seu problema, mas não responde à pergunta.
suspectus

A resposta selecionada - chamar não /bin/rmfuncionaria? Se eu tiver uma função no bash e um arquivo executável com o mesmo nome no diretório atual, basta adicionar ./na frente do nome o arquivo - e não a função. PS - unset
Adicionei

Sim, /bin/rmfunciona. Isso unsetremove a necessidade de digitar o caminho completo.
daw 25/02

0

Se você rmestiver com um alias rm -i, use unalias rm;

Não use rm -fdiretamente, a menos que você realmente queira remover muitos arquivos protegidos contra gravação. Deve haver uma boa razão para usar -f.

No entanto, se você tiver muitos arquivos protegidos contra gravação, poderá preferir rsync -r --delete empty/ removed_dir/uma velocidade mais rápida.


0

Minha maneira favorita de fazer isso é simplesmente usar o commandcomando bash, da mesma maneira que você usa sudo. Isso executará seu comando sem apelidos, assim como executá-lo /bin/rm(provavelmente rmé apelido como rm -i).

Exemplo:

command rm -f /tmp/file.txt

0
rm -Rf <folder-to-be-deleted>

-R: f: força recursiva, sem prompt

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.