Eliminar archivo sin preguntar

89

¿Cómo puedo eliminar el archivo sin preguntarle al usuario si acepta eliminarlo? Estoy escribiendo un script de shell y uso la función rm, pero pregunta "¿eliminar el archivo normal?" y realmente no necesito esto Gracias.

Oye
fuente
55
rm -f, yes | rmetc., pero esto pertenece a SU.
44
rmno muestra un "eliminar archivo normal?" pregunta por defecto. Debe tener un alias rm -io una función definida. Me sorprende que el alias sea visible dentro de su script. ¿Está ejecutando el script ( ./foo.sh) o lo obtiene ( . foo.sho source foo.sh)?
Keith Thompson el

Respuestas:

103

Es posible que tenga un rmalias para rm -iprobar esto:

/bin/rm -f file.log

Para ver tus alias puedes correr alias.

chown
fuente
77
Alternativamente, use command rm ...o \rm ...para omitir el alias / función
glenn jackman
66
Se ha argumentado que tener rmalias rm -ies una mala idea. El rmcomando, por defecto, elimina silenciosamente el archivo nombrado. Al alias rm -i, puede adquirir el hábito de no verificar cuidadosamente antes de presionar Entrar, dependiendo de la solicitud interactiva para guardarlo. Luego escribe rm some-important-fileen un entorno sin el alias.
Keith Thompson
@Keith Eso es muy cierto, solo alias personalmente rm to rm -v
chown
1
Si "rm" es una función (en lugar de un alias), esta respuesta debería funcionar. Y el unsetcomando bash podría ser interesante
Xen2050,
56

La bandera de fuerza elimina todas las indicaciones;

rm -f {file}

linces
fuente
2
Esto es lo que estoy buscando, no la respuesta aceptada.
gsamaras
30

Que la fuerza esté con usted - rm -f

manojlds
fuente
55
Ya he votado por la respuesta de Lynks, y esto es exactamente lo mismo. Solo votando por el sentido del humor
rain_
Voté tanto el comentario como la respuesta solo porque alguien realmente encontró sentido del humor en SO ...
Mac
5

Dentro de un script de shell, desearía utilizarlo, rm -f <filename>pero también tiene la opción de deshacerse de la -iopción implícita para su entorno ingresando unalias rmsu shell (o perfil).

Musannif Zahir
fuente
unalias rmno funciona en CentOS? Amazon Linux?
Suncatcher
5

el yesprograma responde repetidamente sí a cualquier pregunta. para que pueda canalizarlo al rmprograma interactivo para obtener el efecto deseado también.

yes | rm <filename>

por el contrario, si no quieres hacer algo interactivo, puedes hacerlo

yes n | <something interactive>

y eso repetirá 'n' en la secuencia de entrada (respondiendo efectivamente no a las preguntas)

mholm815
fuente
La yes nopción no me funciona. Mientras lo uso yes n | rm file.txt, en realidad elimina el archivo a pesar de que el archivo está protegido correctamente.
iammilind
5

Si tiene los permisos necesarios para eliminar el archivo y no desea que se le solicite, haga lo siguiente (-f = force):

rm -f file

Si no tiene permisos para el archivo, deberá usar:

sudo rm -f file
Kassym Dorsel
fuente
1
El "eliminar archivo normal?" El mensaje implica que no es un problema de permisos.
Keith Thompson
4
\rm file

La barra invertida \omite los alias.

teknopaul
fuente
1
"\" es una barra invertida, ¿a qué te refieres?
Cand3r
Sí, para usar rm sin alias que resulte en un prefijo de diálogo de confirmación no deseado con \.
teknopaul
1

Además de usar el -fparámetro, también puede usar el findcomando, p. Ej.

find -name file.log -delete
kenorb
fuente
0

Actualmente estoy trabajando en un sistema, donde el shell bash recibió la definición del comando rm como una función en uno de los archivos de configuración global:

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

Por lo tanto, ninguna de las respuestas anteriores con respecto a los alias funcionó. Para contrarrestar el comportamiento molesto, desactivé la función rm en mi archivo .bashrc

 unset -f rm

Tuve un problema similar al del abridor. Sin embargo, no encontré ninguna respuesta que mencionara la posibilidad que rmestá oculta por una función de shell. Así que agregué la respuesta aquí con la esperanza de que sería de ayuda para alguien que enfrenta el mismo tipo de problema.

Escribir /bin/rmo rm -ftodo el tiempo es inconveniente y puede tener malas consecuencias (en el caso de rm -f).

grajilla
fuente
Eso puede haber resuelto su problema, pero no responde la pregunta.
sospechoso
¿No funcionaría la respuesta seleccionada /bin/rm? Si tengo una función en bash, y un archivo ejecutable con el mismo nombre en el directorio actual, solo agregando ./frente al nombre llamará al archivo, no a la función. PD: agregué un comentario a la respuesta seleccionada sobre una función yunset
Xen2050
Si /bin/rmfunciona. Hacer esto unsetelimina la necesidad de escribir la ruta completa.
amanece
0

Si su rmalias es rm -i, entonces use unalias rm;

No lo use rm -fdirectamente a menos que realmente quiera eliminar muchos archivos protegidos contra escritura. Debe haber una muy buena razón para usar -f.

Sin embargo, si tiene muchos archivos protegidos contra escritura, es posible que prefiera rsync -r --delete empty/ removed_dir/una velocidad más rápida.

Zhu Jinxuan
fuente
0

Mi forma favorita de hacer esto es simplemente usar el commandcomando en bash, de la misma manera que lo usas sudo. Esto ejecutará su comando sin alias, al igual que ejecutarlo por /bin/rm(probablemente rmtiene un alias como rm -i).

Ejemplo:

command rm -f /tmp/file.txt
PatrykMilewski
fuente
0
rm -Rf <folder-to-be-deleted>

-R: Recursivo f: fuerza, sin solicitud

mdivk
fuente