El man
página de rm command
en GNU coreutils 8.12.197-032bb describe el -f
o --force
opción como "ignorar archivos inexistentes, nunca preguntar". Sin esta opción, eliminará todos los archivos existentes, nunca preguntará y devolverá un código de salida distinto de cero si alguno de los archivos especificados no existiera. Me gustaría preservar los archivos si hay de los archivos especificados no existen . ¿Cuál es la forma más fácil de hacer esto?
El caso de uso es seguridad :Si estoy tratando de eliminar un archivo que no existe, podría deberse a que hay una expectativa no válida (o un simple error) en el comando. Por ejemplo el famoso rm -rf /usr /lib/nvidia-current/xorg/xorg
podría haberse evitado de muchas maneras, siendo una de ellas esa opción (obviamente, a menos que el usuario, por alguna coincidencia increíble, tuviera un /lib/nvidia-current/xorg/xorg
directorio), y otro siendo Use More Quotes™. Sin embargo, las comillas no siempre son suficientes. Por ejemplo, considere ssh host '/bin/rm some paths; /bin/bash foo.sh'
– Si hubiera olvidado el punto y coma o insertado prácticamente cualquier otro símbolo como dos puntos o coma, habría intentado eliminar /bin/bash
y ~/foo.sh
.
Respuesta aceptada:
Yo uso este tipo de cosas:
mkdir DELETE && mv "some" "paths" DELETE && rm -rf DELETE
Para una sola ruta:
mv /some/path DELETE && rm -rf DELETE
Aún mejor, escriba el comando rm command
en una línea de comando separada:mv /some/path DELETE
Entrar rm -rf DELETE
Entrar . De esa forma, el único rm command
El comando que lo convierte en su historial de shell está en un archivo llamado DELETE
, por lo que si eliminó una versión anterior de un archivo, no corre el riesgo de eliminar la nueva versión presionando accidentalmente Arriba el número incorrecto de veces entonces Enter .
Si quieres automatizar un poco:
mv_to_DELETE () {
mkdir DELETE &&
mv -- "[email protected]" DELETE/
}
mv_to_DELETE "some" "paths"
rm -rf DELETE