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.
89
rm -f
,yes | rm
E assim por diante, mas esta pertence a SU.rm
não mostra um "remover arquivo normal?" prompt por padrão. Você deve ter o aliasrm -i
ou 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.sh
ousource foo.sh
)?Respostas:
Você pode ter um
rm
alias pararm -i
tentar o seguinte:Para ver seus aliases, você pode executar
alias
.fonte
command rm ...
ou\rm ...
para ignorar o alias / funçãorm
aliasrm -i
é uma má ideia. Orm
comando, por padrão, remove silenciosamente o arquivo nomeado. Aorm -i
usar 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ê digitarm some-important-file
em um ambiente sem o alias.unset
de comando pode ser interessanteO sinalizador de força remove todos os prompts;
rm -f {file}
fonte
Que a força esteja com você -
rm -f
fonte
Dentro de um script de shell, você gostaria de usar,
rm -f <filename>
mas também tem a opção de se livrar da-i
opção implícita para o seu ambiente, inserindounalias rm
seu shell (ou perfil).fonte
unalias rm
não funciona no CentOS? Amazon Linux?o
yes
programa responde repetidamente yes a quaisquer prompts. para que você possa inseri-lo norm
programa interativo para obter o efeito desejado também.por outro lado, se você não quiser fazer algo interativo, poderá fazer
e isso repetirá 'n' no fluxo de entrada (respondendo efetivamente não a perguntas)
fonte
yes n
opção não está funcionando para mim. Enquanto eu usoyes n | rm file.txt
, ele realmente remove o arquivo, mesmo que o arquivo esteja protegido corretamente.Se você possui as permissões necessárias para excluir o arquivo e não deseja ser solicitado, faça o seguinte (-f = force):
Se você não tiver permissões para o arquivo, precisará usar:
fonte
A barra invertida
\
ignora os aliases.fonte
Além de usar o
-f
parâmetro, como alternativa, você pode usar ofind
comando, por exemplofonte
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:
Portanto, nenhuma das respostas acima sobre aliases funcionou. Para combater o comportamento irritante, desative a função rm no meu arquivo .bashrc
Eu tive um problema semelhante ao do abridor. No entanto, não encontrei nenhuma resposta que mencionasse a possibilidade
rm
oculta 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/rm
ourm -f
o tempo todo é inconveniente e pode ter más consequências (no caso derm -f
).fonte
/bin/rm
funcionaria? 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
/bin/rm
funciona. Issounset
remove a necessidade de digitar o caminho completo.Se você
rm
estiver com um aliasrm -i
, useunalias rm
;Não use
rm -f
diretamente, 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.fonte
Minha maneira favorita de fazer isso é simplesmente usar o
command
comando bash, da mesma maneira que você usasudo
. Isso executará seu comando sem apelidos, assim como executá-lo/bin/rm
(provavelmenterm
é apelido comorm -i
).Exemplo:
fonte
fonte