wake-up-neo.com

Wie erstelle ich rekursiv nicht existierende Unterverzeichnisse mit Bash?

Ich erstelle ein schnelles Backup-Skript, mit dem einige Datenbanken in eine ordentliche Verzeichnisstruktur kopiert werden. Dabei wurde mir klar, dass ich testen muss, um sicherzustellen, dass die Verzeichnisse vorhanden sind, bevor ich sie erstelle. Der Code, den ich habe, funktioniert, aber es scheint, dass es einen besseren Weg gibt, es zu tun. Irgendwelche Vorschläge?

[ -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"
167
Topher Fangio

Du kannst den ... benutzen -p Parameter, der dokumentiert ist als :

-p, --eltern

wenn kein Fehler vorhanden ist, erstellen Sie nach Bedarf übergeordnete Verzeichnisse

So:

mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
396
bmargulies
$ mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
64

Während vorhandene Antworten definitiv den Zweck lösen, können Sie dies tun, wenn Sie eine geschachtelte Verzeichnisstruktur unter zwei verschiedenen Unterverzeichnissen replizieren möchten

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

Es wird die folgende Verzeichnisstruktur unter dem Verzeichnis erstellt, von dem aus es aufgerufen wird

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

Das Beispiel stammt aus dieser Link zum Erstellen der SBT-Verzeichnisstruktur

8
y2k-shubham