Tengo un script bash que quiero eliminar archivos de varios directorios. Con frecuencia, no estarán allí porque no se generaron y eso está bien. ¿Hay alguna manera de hacer que el script no informe ese error, pero si rm tiene alguna otra salida para informar eso?
Alternativamente, ¿hay un mejor comando para eliminar el archivo que sea menos ruidoso?
Si su requisito es que
rm
no se queja de la falta de archivos, pero que también desea cualquier otro resultadorm
, mi sugerencia sería probar primero la existencia del archivo de destino y solo llamarrm
( sin la-f
marca) si el archivo realmente existe.Llamar
rm -f
a un archivo que, por ejemplo, no tiene permisos de escritura de usuario, eliminará el archivo y tampoco emitirá el aviso normal para ese escenario.En caso de que quiera usar la misma idea con varios archivos, crearía una definición de función, como:
Úselo como:
qrm file1 file2-does-not-exist *.txt etc here
fuente
Declaró que aún desea ver otros resultados del
rm
comando cuando lo ejecuta, pero el uso de la-f
opción los eliminará. Tendrá que filtrar STDERR para lo que desea, lo cual es un poco complicado, dado que desea que se muestre todo lo demás.Deberá usar un comando como este:
Comando explicado:
-f
argumento es forzar y no solicitar confirmación o errores3>&1 1>&2 2>&3 3>&-
es cambiar STDOUT y STDERR para filtrar (puede leer más sobre esto aquí si lo desea| grep -v 'No such file or directory'
está filtrando el mensaje que no quieres verAhora, si solo desea suprimir por completo los mensajes de error, puede ejecutar el siguiente comando:
Este comando redirige STDERR a / dev / null para que no lo vea cuando ejecute el comando.
fuente
rm
sin-v
salidas nunca a stdout, solo stderr, por lo que en este caso podrías simplemente2>&1 | grep
sin el baile que es más útil en general,Como alternativa, puede usar el
find
comando con la-delete
opción. Esto (obviamente) solo eliminará los archivos que encuentre, por lo que nunca advierte si ninguno lo está. Un ejemplo podría ser:que buscaría en el
/var/log/triffids/
directorio y eliminaría todos los archivos con el.log
sufijo que no se hayan modificado durante más de 30 días.Siempre es una buena idea ejecutar estos comandos sin la
-delete
opción primero, para asegurarse de que encuentre los archivos que espera.fuente
Marque la opción
--force
(-f
) derm
:fuente
Este es un truco, pero siempre se podría
touch
eliminar el archivo. Si no existe, se creará para querm
pueda eliminarlo.fuente
Puede usar
-f
como sea, de acuerdo con la página del manual:no le pedirá nada y hará exactamente lo que quiera.
fuente
Hay dos formas principales: si agrega la opción -f, no mostrará el error "no existe" y dos: (funciona para casi cualquier comando) en lugar de simplemente hacer "thecommand" do "thecommand 2> / dev / null "donde" thecommand "es el comando que estás haciendo.
fuente