Bash에서 디렉터리 중첩 만들기

Bash에서 디렉터리 중첩 만들기

나는 이 명령을 중첩하는 더 깔끔한 방법을 원합니다.

if [ ! -d $BACKUPDIR ]; then
  mkdir -p $BACKUPDIR
  mkdir -p $BACKUPDIR/directories
  mkdir -p $BACKUPDIR/databases
  mkdir -p $BACKUPDIR/logs
else
  :
fi

답변1

중괄호 확장을 사용하면 다음을 수행할 수 있습니다.

mkdir -p "$BACKUPDIR"/{directories,databases,logs}

하위 디렉터리도 존재하는지 확인하려면 mkdir테스트하지 않고 실행하면 됩니다. 이를 통해 -p기존 디렉터리에 대한 불만이 없어야 하며, $BACKUPDIR기본 디렉터리는 존재하지만 하위 디렉터리가 누락되는 상황이 발생하지 않습니다.

(물론 비어 있으면 파일 시스템 루트에 하위 디렉터리를 만들려고 시도합니다. 그러나 스크립트에서 이전에 일부 값을 설정 BACKUPDIR했다고 가정합니다 .)BACKUPDIR

답변2

하다:

[ -d "$BACKUPDIR" ] || mkdir -p "$BACKUPDIR"/{directories,databases,logs}
  • [ -d "$BACKUPDIR" ]BACKUPDIR변수에 포함된 디렉터리가 존재하는지 확인하세요 .

  • ||단락 평가를 수행하고 이를 논리적 OR로 처리합니다.

  • 중괄호 확장은 foo/{x,y,z}쉘에 의해 다음으로 확장 됩니다.foo/x foo/y foo/z

관련 정보