Estoy usando rm
dentro de un script BASH para eliminar muchos archivos. A veces los archivos no están presentes, por lo que informa muchos errores. No necesito este mensaje He buscado en la página del manual un comando para rm
silenciarlo, pero la única opción que encontré es -f
que, según la descripción, "ignorar archivos inexistentes, nunca preguntar", parece ser la opción correcta, pero el nombre no parece encajar , así que me preocupa que pueda tener consecuencias no deseadas.
- ¿Es la
-f
opción la forma correcta de silenciarrm
? ¿Por qué no se llama-q
? - ¿Esta opción hace algo más?
Respuestas:
El uso principal de
-f
es forzar la eliminación de archivos que no se eliminaríanrm
por sí solos (como un caso especial, "elimina" archivos inexistentes, suprimiendo así el mensaje de error).También puede simplemente redirigir el mensaje de error usando
(o el equivalente de su sistema operativo). Puede verificar el valor de
$?
inmediatamente después de llamarrm
para ver si realmente se eliminó un archivo o no.fuente
--f
es válido para GNU Coreutilsrm
, pero solo porque es una abreviatura única para--force
. La forma corta-f
es más clara y más portátil.--f
aquí es solo un error tipográfico para-f
.2>
?Sí,
-f
es la opción más adecuada para esto.fuente
rm
arm -i
.-f es el indicador correcto, pero para el operador de prueba, no rm
esto asegura que el archivo existe y es un archivo normal (no un directorio, nodo de dispositivo, etc.)
fuente
if [ -f "$THEFILE" ]; then rm "$THEFILE"; fi
que hace que la prueba y los pasos de eliminación de archivos sean secuencialmente explícitos.test
yrm
. No hay forma derm
ejecutar antestest
aquí. Mirar antes de saltar es un error común en la programación concurrente: ya no puedes confiar en el resultado de la "mirada" cuando realmente "saltas"; la solución a eso es usar operaciones de bloqueo o atómicas. Que es precisamente por lo que quieresrm -f
, que es un ejemplo de esto último.\rm -f file
nunca informará no encontrado.fuente
rm
(como era popular en algunos sitios a principios de la década de 1990 para evitar que los principiantes eliminen cosas y luego llamen al administrador del sistema para recuperar sus archivos).&&
sin -f se rompe una vez que no se encuentra el archivo.En cuanto a
rm -f
hacer "cualquier otra cosa", fuerza (-f
es una forma abreviada de--force
) la eliminación silenciosa en situaciones en las que derm
lo contrario le pediría confirmación. Por ejemplo, cuando intente eliminar un archivo que no pueda escribir de un directorio que pueda escribir.fuente
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.
fuente
rm -f
orm filename >&/dev/null
?