2009-11-13 15 views
133

Estoy creando un script de copia de seguridad rápido que volcará algunas bases de datos en una estructura de directorios bonita/ordenada y me di cuenta de que debo probar para asegurarme de que los directorios existen antes de crearlos. El código que tengo funciona, pero parece que hay una mejor manera de hacerlo. ¿Alguna sugerencia?¿Cómo crear subdirectorios inexistentes recursivamente usando Bash?

[ -d "$BACKUP_DIR" ] || mkdir "$BACKUP_DIR" 
[ -d "$BACKUP_DIR/$client" ] || mkdir "$BACKUP_DIR/$client" 
[ -d "$BACKUP_DIR/$client/$year" ] || mkdir "$BACKUP_DIR/$client/$year" 
[ -d "$BACKUP_DIR/$client/$year/$month" ] || mkdir "$BACKUP_DIR/$client/$year/$month" 
[ -d "$BACKUP_DIR/$client/$year/$month/$day" ] || mkdir "$BACKUP_DIR/$client/$year/$month/$day" 
+1

http://unix.stackexchange.com/questions/49263/recursive-mkdir –

Respuesta

340

Usted puede utilizar el parámetro -p, que es documented as:

-p, --parents

ningún error si es que existen, que los directorios padre, según sea necesario

Entonces:

mkdir -p "$BACKUP_DIR/$client/$year/$month/$day" 
+26

@bmargulies - Santa mierda que era mucho más simple de lo que pensaba = P –

+0

Votificado arriba porque eres un delegador. Vaya, ¡ya lo hice hace aproximadamente un año! –

61
$ mkdir -p "$BACKUP_DIR/$client/$year/$month/$day" 
+8

+1 para el ejemplo. – mskfisher

1

Mientras respuestas existentes definitivamente resolver el propósito, si estás por mirando para replicar la estructura de directorios anidados bajo dos subdirectorios diferentes, entonces usted puede hacer esto

mkdir -p {main,test}/{resources,scala/com/company} 

Se creará siguiente estructura de directorios en el directorio desde donde se invoca

├── main 
│   ├── resources 
│   └── scala 
│    └── com 
│     └── company 
└── test 
    ├── resources 
    └── scala 
     └── com 
      └── company 

El ejemplo fue tomado de this link para la creación de SBT estructura de directorios

+2

Es posible que desee explicar lo que '{..., ...}' está en bash y por qué lo que hace tiene sentido. Una breve explicación de la * ampliación del paréntesis * sería beneficioso para otros usuarios. Un "usted puede hacer esto" y obtener "esto" deja un poco a la imaginación. –

Cuestiones relacionadas