comprobar si el directorio existe y eliminar en un comando unix


106

¿Es posible verificar si existe un directorio y eliminarlo si existe, en Unix usando un solo comando? Tengo una situación en la que uso la tarea ANT 'sshexec' en la que puedo ejecutar solo un comando en la máquina remota. Y necesito verificar si el directorio existe y eliminarlo ...


¿Por qué no usar rmdir? si el directorio no existe, fallará.
Ferruccio

4
Fracasará. Y error en mi script ANT. Eso hará que mi construcción falle.
remo

El uso mkdir -pignorará los errores si ya existen.
user562374

2
@ Ferruccio- el uso de rm -rf / dir_name no arroja un error pero rm -rf / dir_name arroja dice No se encontró tal archivo o directorio. (Recién probado)
remo

3
@remo bro acaba de publicar el mismo comando dos veces
Marcos Pereira

Respuestas:


149

Suponiendo que $WORKING_DIRestá configurado en el directorio ... esta línea debería hacerlo:

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

(de lo contrario, simplemente reemplácelo con su directorio)


161

¿Por qué no usar rm -rf /some/dir? Eso eliminará el directorio si está presente; de ​​lo contrario, no hará nada. A diferencia de rm -r /some/direste tipo de comando, el comando no se bloqueará si la carpeta no existe.


13
Creo que la pregunta original pretendía significar: realice la eliminación solo cuando el archivo / directorio exista o no. Este comando puede funcionar y producir resultados similares, pero hacer una prueba antes del comando tiene más sentido.
Ankur Chauhan

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

12
Ésta no es la respuesta a la pregunta.
xpto

10
Como se indicó anteriormente, esta no es la respuesta. Una razón para probar antes de eliminar sería dentro de un trabajo de Jenkins. Si el directorio no existe e intenta eliminarlo, el trabajo fallará. Verificar de antemano es la mejor opción.
leñador

8
Creo que esta es la respuesta correcta. hace lo que necesita @remo, es decir, elimina un directorio solo si existe y no da un error si no existe. Tal vez la pregunta no esté del todo bien planteada porque ¿por qué necesitarías verificar la existencia cuando a este comando no le importa?
pedram bashiri

32

Tratar:

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

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

EDITAR 2 : En bash, [ -d something ]verifica si hay un directorio llamado 'algo', devolviendo un código de éxito si existe y es un directorio. Encadenar comandos con && ejecuta el segundo comando solo si el primero tuvo éxito. Entonces [ -d somedir ] && commandejecuta el comando solo si el directorio existe.


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

Primero quiero ver si funciona localmente y les puedo enviar el comando de forma remota. ¿Estoy mirando diciendo que revise el directorio "/ test" ... solo [-d / test] && mkdir / test?
remo

1
Debería dar un error si existe, porque comprueba si el directorio existe, y si es así intenta crearlo. Eso es lo que hace por mí (recién probado). No debería crear un directorio. Como desea BORRAR, probablemente necesite: [ -d /test ] && rmdir /test(o rm -rf / test si no va a estar vacío y desea eliminar todo el contenido)
sinelaw

@SineLaw: NOTA - ¡No se produjo un error cuando el directorio existía para mí e intentaba crear un directorio! (lo probé de nuevo). Pero para DELETE funciona. Por favor revise eso
remo

sharma: ¿estás usando bash? ¿Qué dice 'echo $ SHELL'?
sinelaw

0

Aquí hay otro trazador de líneas:

[[ -d /tmp/test ]] && rm -r /tmp/test
  • && significa ejecutar la declaración que sigue solo si la declaración anterior se ejecutó correctamente (devolvió el código de salida cero)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.