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_cache
está 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 1
para evitar que se elimine el directorio raíz de búsqueda (después de eliminar la-type f
limitación).fuente
-type f
ya 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 f
solo eliminará los archivos normales, por lo que los enlaces simbólicos, por ejemplo, no se eliminarán./tmp/our_cache
por 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/null
que no imprima estofuente
Otra forma (aunque un poco exagerada ...):
esto usa
test
o[
para probar si la cadena regresó de ejecutar unls
en 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
ls
suprimirá 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
-f
modificador derm
para 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