2012-04-20 12 views
99

Estoy usando rm dentro de una secuencia de comandos de BASH para eliminar muchos archivos. A veces los archivos no están presentes, por lo que informa de muchos errores. No necesito este mensaje He buscado en la página man un comando para hacer que rm sea silencioso, pero la única opción que encontré es -f, que a partir de la descripción, "ignorar archivos inexistentes, nunca preguntar", parece ser la elección correcta, pero el nombre no parece para caber, por lo que me preocupa que pueda tener consecuencias no deseadas.Cómo evitar que rm informe que no se encontró un archivo?

  • es la opción -f la forma correcta para silenciar rm? ¿Por qué no se llama -q?
  • ¿Esta opción hace algo más?
+0

no desea utilizar -f, elimina el archivo que marcó como de solo lectura. – pizza

Respuesta

136

El uso principal de -f es forzar la eliminación de archivos que no puede eliminar usando rm por sí mismo (como un caso especial, se "elimina" archivos inexistentes, lo que suprime el mensaje de error).

también puede simplemente redirigir el mensaje de error utilizando

$ rm file.txt 2> /dev/null 

(o el equivalente en su sistema operativo). Puede verificar el valor de $? inmediatamente después de llamar al rm para ver si un archivo se eliminó o no.

+3

'--f' es válido para GNU Coreutils' rm', pero solo porque es una abreviatura única para '--force'. La forma corta '-f' es más clara y portátil. –

+0

No estoy seguro de que incluso me di cuenta. '--f' aquí es solo un error tipográfico para' -f'. – chepner

+3

¿Alguna razón por la que no corrigió el error tipográfico? Voy a arreglarlo ... – iconoclast

44

Sí, -f es la opción más adecuada para esto.

+0

Algunos sistemas le indicarán cuando tenga espacio incluso con -f hasta que use la barra diagonal inversa. – vimdude

+6

@vimdude: No es "algunos sistemas"; ese comportamiento indica que tienes una función de shell o un alias que mapea 'rm' a' rm -i'. –

+0

@KeithThompson true – vimdude

3

En lo que rm -f haciendo "todo lo demás", lo hace la fuerza (-f es la abreviatura de --force) eliminación de silencio en situaciones en las rm de otro modo le pedirá confirmación. Por ejemplo, cuando intenta eliminar un archivo que no puede escribir usted desde un directorio que puede escribir usted.

8

\rm -f file nunca se informará no encontrado.

+2

El -r es innecesario y peligroso. – mahemoff

+1

Supuse muchos archivos o directorios. Vuelva a leer la solicitud del usuario y tiene razón; solo estaba solicitando archivos. Así que corrigió mi respuesta – vimdude

+0

¿Qué está haciendo la barra invertida antes de que lo haga la rm? por favor chicos, necesito una respuesta a eso.En Windows, la versión 4.1 de cygwin no puede funcionar con \ rm, mientras que 3.75 funciona muy bien. –

16

-f es la bandera correcta, pero por el operador de la prueba, no rm

[ -f "$THEFILE" ] && rm "$THEFILE" 

esto asegura que el archivo existe y es un archivo normal (no un directorio, dispositivo de nodo etc ...)

+2

Sin embargo, esto tiene una condición de carrera y no se debe usar en secuencias de comandos de producción. – tripleee

+1

Entonces, ¿qué debería? – mmlac

-1

Tuve el mismo problema para cshell. La única solución que tuve fue crear un archivo ficticio que coincidiera con el patrón antes de "rm" en mi script.

+4

¿Esa era realmente la * única * solución? ¿Intentó 'rm -f' o' rm nombredearchivo> &/dev/null'? –

Cuestiones relacionadas