Estou usando rm
dentro de um script BASH para excluir muitos arquivos. Às vezes, os arquivos não estão presentes, por isso relata muitos erros. Eu não preciso dessa mensagem. Eu procurei na página de manual por um comando para rm
silenciar, mas a única opção que encontrei é a -f
que, a partir da descrição, "ignora arquivos inexistentes, nunca solicita", parece ser a escolha certa, mas o nome não parece se encaixar , por isso estou preocupado que possa ter consequências não intencionais.
- A
-f
opção é a maneira correta de silenciarrm
? Por que não é chamado-q
? - Esta opção faz mais alguma coisa?
Respostas:
O principal uso de
-f
é forçar a remoção de arquivos que não seriam removidosrm
por si só (como um caso especial, ele "remove" arquivos inexistentes, suprimindo a mensagem de erro).Você também pode redirecionar a mensagem de erro usando
(ou o equivalente do seu sistema operacional). Você pode verificar o valor
$?
imediatamente após ligarrm
para ver se um arquivo foi realmente removido ou não.fonte
--f
é válido para o GNU Coreutilsrm
, mas apenas porque é uma abreviação exclusiva para--force
. A forma abreviada-f
é mais clara e mais portátil.--f
aqui está apenas um erro de digitação-f
.2>
fazem?Sim,
-f
é a opção mais adequada para isso.fonte
rm
pararm -i
.-f é o sinalizador correto, mas para o operador de teste, não rm
isso garante que o arquivo exista e seja um arquivo regular (não um diretório, nó do dispositivo etc ...)
fonte
if [ -f "$THEFILE" ]; then rm "$THEFILE"; fi
:, que torna as etapas de teste e remoção de arquivo explicitamente seqüenciais.test
erm
. Não há comorm
executar antestest
aqui. Observar antes de saltar é um erro comum na programação simultânea - você não pode mais confiar no resultado da "aparência" quando realmente "salta"; a solução para isso é usar operações atômicas ou de bloqueio. É exatamente por isso que você desejarm -f
, que é um exemplo do último.\rm -f file
nunca reportará não encontrado.fonte
rm
(como era popular em alguns sites no início dos anos 90 para impedir que iniciantes removessem coisas e depois chamassem o administrador do sistema para recuperar seus arquivos).&&
while sem -f ele quebra quando o arquivo não é encontrado.Na medida em que
rm -f
faz "qualquer outra coisa", força (-f
é uma abreviação de--force
) remoção silenciosa em situações emrm
que, de outra forma, solicitava confirmação. Por exemplo, ao tentar remover um arquivo não gravável por você de um diretório gravável por você.fonte
Eu tive o mesmo problema para cshell. A única solução que tive foi criar um arquivo fictício que correspondesse ao padrão antes de "rm" no meu script.
fonte
rm -f
ourm filename >&/dev/null
?