Como parte de un script de implementación, quiero volcar algunas cosas en caché de mi directorio temporal. Yo uso un comando como:
rm /tmp/our_cache/*
Sin embargo, si /tmp/our_cacheestá vacío (bastante común cuando se envían muchos cambios en rápida sucesión a nuestro servidor de prueba), esto imprime el siguiente mensaje de error:
rm: cannot remove `/tmp/our_cache/*': No such file or directory
No es un gran problema, pero es un poco feo y quiero reducir la relación ruido / señal en la salida de este script.
¿Cuál es una forma concisa en Unix para eliminar el contenido de un directorio sin recibir mensajes quejándose de que el directorio ya está vacío?

Editar 1
eliminado "-tipo f
Editar 2
Se agregó una opción no estándar
-mindepth 1para evitar que se elimine el directorio raíz de búsqueda (después de eliminar la-type flimitación).fuente
-type fya que también puede haber directorios temporales (aunque el ejemplo en la pregunta no los tiene en cuenta, por lo que probablemente no estén allí ...)-type fsolo eliminará los archivos normales, por lo que los enlaces simbólicos, por ejemplo, no se eliminarán./tmp/our_cachepor lo que bien podría hacerlorm -r /tmp/our_cache. Mientras usa opciones no estándar, puede usarlas-mindepth 1. Tenga en cuenta querm /tmp/our_cache/*, al contrario , también elimina los subdirectorios y su contenido y archivos ocultos.Puede redirigir el error estándar para
/dev/nullque no imprima estofuente
Otra forma (aunque un poco exagerada ...):
esto usa
testo[para probar si la cadena regresó de ejecutar unlsen su directorio no está vacía. Entonces, si, y solo si, esa cadena NO está vacía, eliminará todo lo que se encuentre debajo de su directorio.NOTA: dejar el globo fuera de él
lssuprimirá el error de ningún archivo.fuente
Si su script es usin BASH, puede probar:
Si lo hace, seguirá produciendo un error si hay un problema "real" o si un archivo está protegido (entonces necesitaría el
-fmodificador dermpara eliminar este tipo de archivos), pero evitará el error cuando no haya archivos.Si utiliza otro shell que BASH para sus secuencias de comandos, como zsh, ksh, puede probar esta otra sintaxis que podría ser más portátil:
fuente