2011-01-30 16 views
48

¿Es posible verificar si existe un directorio y eliminarlo si lo hace, en Unix con un solo comando? Tengo una situación en la que utilizo la tarea ANT 'sshexec' donde puedo ejecutar solo un comando en la máquina remota. Y necesito para comprobar si el directorio existe y eliminarlo ...compruebe si el directorio existe y elimínelo en un comando Unix

+0

por qué no usar rmdir? si el directorio no existe, fallará. – Ferruccio

+1

Fallará. Y error en mi script ANT. Eso causará que mi construcción se cuelgue. – remo

+0

El uso de 'mkdir -p' ignorará los errores si ya existen. – user562374

Respuesta

86

¿Por qué no usar rm -rf /some/dir? Eso eliminará el directorio si está presente; de ​​lo contrario, no haga nada.

+9

Creo que la pregunta original pretendía decir: realizar la eliminación solo cuando el archivo/directorio existe o no. Este comando puede funcionar y producir resultados similares, pero en realidad hacer una prueba antes de que el comando tenga más sentido. –

+3

@AnkurChauhan +1, recibí una advertencia si el directorio no existe. – inf3rno

+5

Esta no es la respuesta a la pregunta. –

22

Probar:

bash -c '[ -d my_mystery_dirname ] && run_this_command' 

EDITAR: Esto funcionará si se puede ejecutar bash en la máquina remota ....

EDITAR 2: En bash, [ -d something ] comprueba si hay un directorio llamado 'algo', devolviendo un código de éxito si existe y es un directorio. Los comandos de encadenamiento con & & ejecutan el segundo comando solo si el primero tuvo éxito. Por lo tanto, [ -d somedir ] && command ejecuta el comando solo si el directorio existe.

+0

Sí, y pruébalo en un caparazón para asegurarte de que es lo que quieres. – sinelaw

+0

Primero quiero ver si funciona localmente y puedo enviar el comando de forma remota. ¿Estoy buscando decir que marque el directorio "/ test" ... solo [-d/test] && mkdir/test? – remo

+0

Sí, ¡solo pruébalo! – sinelaw

25

Suponiendo $WORKING_DIR se establece en el directorio ... esto de una sola línea debe hacerlo:

if [ -d "$WORKING_DIR" ]; then rm -Rf $WORKING_DIR; fi 

(de lo contrario sólo sustituir con su directorio)

+3

ESTA ES LA RESPUESTA REAL. – doublejosh

Cuestiones relacionadas