Bash를 사용하여 존재하지 않는 하위 디렉토리를 재귀 적으로 만드는 방법은 무엇입니까?


191

일부 데이터베이스를 멋지고 깔끔한 디렉토리 구조로 덤프하는 빠른 백업 스크립트를 작성 중이며 디렉토리를 작성하기 전에 디렉토리가 존재하는지 테스트해야 함을 깨달았습니다. 내가 가지고있는 코드는 작동하지만 더 좋은 방법이있는 것 같습니다. 어떤 제안?

[ -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"

답변:


431

다음 과 같이 문서화 된-p 매개 변수 를 사용할 수 있습니다 .

-p,-부모

존재하는 경우 오류 없음, 필요에 따라 상위 디렉토리 작성

그래서:

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

30
@bmargulies-생각보다 훨씬 더 거룩한 쓰레기 = P
Topher Fangio

삭제 전문가이기 때문에 공감했습니다. 죄송합니다. 이미 약 1 년 전에했습니다!
Aaron Hall

사용자가 간헐적 인 폴더 중 하나를 읽을 권한이없는 경우 작동하지 않습니다
TheKitMurkit

1
alias mkdirs=mkdir -p
dr jerry


14

기존 답변이 목적을 확실히 해결하는 동안 중첩 된 디렉토리 구조를 두 개의 다른 하위 디렉토리로 복제하려는 경우이 작업을 수행 할 수 있습니다

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

호출 된 디렉토리 아래에 다음 디렉토리 구조를 만듭니다.

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

SBT 디렉토리 구조를 작성하기 위해이 링크 에서 예제를 가져 왔습니다.


9
{...,...}bash에 무엇이 있고 왜 당신의 일이 의미가 있는지 설명하고 싶을 수도 있습니다 . 가새 확장에 대한 간단한 설명은 다른 사용자에게 도움이 될 것입니다. "당신은 이것을 할 수 있고" "이것은"상상력에 약간의 잎을 가져옵니다.
David C. Rankin

@ DavidC.Rankin에 동의합니다. 이 답변은 완벽한 IMHO이지만 대괄호 표기법이 실제로 무엇을하는지 설명해야합니다.
Delali

0
mkdir -p newDir/subdir{1..8}
ls newDir/
subdir1 subdir2 subdir3 subdir4 subdir5 subdir6 subdir7 subdir8

에 8 개의 하위 디렉토리 만 생성됩니다 newDir/.
csabinho
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.