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.

Ei
fonte
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.

chown
fonte
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}

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

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

manojlds
fonte
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).

Musannif Zahir
fonte
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)

mholm815
fonte
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
Kassym Dorsel
fonte
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.

teknopaul
fonte
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
kenorb
fonte
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).

daw
fonte
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.

Zhu Jinxuan
fonte
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
PatrykMilewski
fonte
0
rm -Rf <folder-to-be-deleted>

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

mdivk
fonte