Cómo evitar la necesidad de emitir "y" varias veces al eliminar el archivo protegido

52

Estoy buscando una solución que se utilice como respuesta a "rm: ¿eliminar el archivo regular protegido contra escritura [x]?"

Estaba pensando en emitir un personaje seguido de un retorno de carro varias veces, en bashrc. ¿Como hacemos eso?

Iancovici
fuente
Puedes definir una función. Este thrad puede ayudarlo: stackoverflow.com/questions/756756/… .
alpert
¿Por qué quieres hacer esto? Es una tarea muy poco obvia querer imprimir retornos de carro (a diferencia de las nuevas líneas) en cualquier caso, y en .bashrc?
l0b0
Pregunta @ l0b0 editada para ser más específica
Iancovici
¿Por qué querrías eliminar archivos en .bashrc? La tarea original aún no está clara.
l0b0
3
@echadromani Es muy común en SO / SE tratar de comprender el problema original para proporcionar una solución óptima que pueda ser aplicable a otras situaciones.
l0b0

Respuestas:

75

Editar según la pregunta actualizada:

Para evitar que se le pregunte si desea eliminar archivos, agregue la -fopción ("forzar"):

rm -f /path/to/file

Esto tiene un efecto secundario que debe tener en cuenta: si alguna de las rutas dadas no existe, no informará de esto y volverá con éxito:

$ rm -f /nonexistent/path
$ echo $?
0

Respuesta original:

Aquí hay una solución simple:

yes "$string" | head -n $number | tr $'\n' $'\r'

yesrepite cualquier cadena que le des infinitamente, separada por nuevas líneas. headlo detiene varias $numberveces y trtraduce las nuevas líneas a retornos de carro. Es posible que no vea ningún resultado debido a los retornos de carro, pero pasarlo a este comando (en bash) debería ilustrarlo:

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

Los usuarios sin bashtubo de lata el resultado de od, hexdumpo xxdpara ver los caracteres reales devueltos.

l0b0
fuente
7

El otro problema con el que me encuentro de vez en cuando es que rmtiene un alias rm -i, algo como esto en / etc / bashrc:

alias rm='rm -i'

En ese caso, puedes unalias rmusar este truco que descubrí hace años o poner una barra diagonal inversa frente a un comando con alias para ignorar el alias solo esa vez, por ejemplo:

\rm somefile

Puede obtener más información sobre los alias a través de un artículo en Nixcraft .

slm
fuente
5

rmestá codificado para preguntar "interactivamente" (espera de la entrada del usuario) en archivos protegidos contra escritura. Hay dos métodos para evitar rmpreguntar:

rm -rf somedir

y

rm -r --interactive=never somedir

(ambos también funcionan sin -reliminar archivos en lugar de directorios)

explicación:

-fhace rmpara "ignorar los archivos y argumentos inexistentes, nunca preguntar".

--interactive=neverhace lo que dice: nunca seas interactivo. en otras palabras: nunca preguntar.

La diferencia entre -fy --interactive=neveres esta parte: "ignorar los archivos y argumentos inexistentes".

comparar:

$ rm -rf nonexistingname
$ echo $?
0

y

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1

La diferencia es principalmente interesante cuando se escriben guiones en los que nunca quieres rmser interactivo pero aún quieres manejar errores.

resumen: en uso de línea de comando rm -rf. en uso de guiones rm -r --interactive=never.


para obtener una respuesta a la pregunta indicada ("Cómo evitar la necesidad de emitir" y "varias veces al eliminar el archivo protegido") consulte https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line / 338860 # 338860

lesmana
fuente
1

¡solo dale sí a todos tus comandos!

yes | rm -r /path/
yes | <command>

De todos modos, siempre puedes forzar el uso de -f:

rm -r -f /path
Nakamoto
fuente
-2

Yo también me encontré con el mismo problema. La respuesta anterior es solo para un archivo, pero si desea ignorar muchos sí.

Puedes usar

sudo rm -r /path/to/directory

para eliminar todos los archivos regulares protegidos contra escritura

Gopal Prasad
fuente
Esto se está rechazando porque elimina todo el directorio. Presumiblemente, OP solo quiere eliminar el archivo en cuestión, no todos los archivos en el mismo subárbol de directorio.
Jake
Oye ... Puede que tengas razón.
Gopal Prasad
Oye ... Puede que tengas razón. Pero no en este caso ... Como si un usuario tuviera mucha paciencia y tiempo, entonces también tiene tiempo para dar 'sí' varias veces ... He asumido que quiere eliminar todos los archivos con un solo comando ... Como escribir el archivo protegido siempre solicita confirmación antes de eliminar este tipo de archivo. Uno de esos ejemplos es cuando crea virtualenv y luego desea eliminarlo en Python. Por favor, inténtelo y encontrará el comando rm pidiendo confirmación y cada vez tienes que proporcionar una respuesta .. He resuelto la situación de esta manera.
Gopal Prasad