중첩된 디렉터리 만들기

중첩된 디렉터리 만들기

bash명령줄 인수를 가져오고 사용자 홈 디렉터리 아래에 중첩된 디렉터리를 만드는 스크립트를 작성하고 싶습니다 . 예:a/b/c

mkdir -p $1/$2/$3

하지만 저는 단지 세 가지 수준의 디렉토리를 생성하는 것이 아니라 명령줄 인수 3 또는 5를 얻고 필요한 수의 중첩 디렉토리를 생성하고 싶습니다.

답변1

#!/bin/sh

(
    IFS=/
    mkdir -p "$*"
)

확장은 구분 기호로 "$*"첫 번째 문자와 함께 연결된 스크립트에 대한 모든 인수로 구성된 작은따옴표 문자열입니다 . $IFS이것이 우리가 $IFS로 설정한 이유이기도 합니다 /.

스크립트의 나머지 부분에 대한 설정을 피하기 위해 서브셸에서 이를 실행하고 있습니다 IFS(작동 방식과 같은 특정 동작을 변경함 read). 스크립트에 다른 내용이 없으면 그대로 두고 (나갈 수 있습니다 ).

테스트:

$ tree
.
`-- script.sh

0 directory, 1 file
$ ./script.sh 1 2 3 4 {a..k}
$ tree
.
|-- 1
|   `-- 2
|       `-- 3
|           `-- 4
|               `-- a
|                   `-- b
|                       `-- c
|                           `-- d
|                               `-- e
|                                   `-- f
|                                       `-- g
|                                           `-- h
|                                               `-- i
|                                                   `-- j
|                                                       `-- k
`-- script.sh

15 directories, 1 file

답변2

$IFS필드 간 구분 기호를 로 설정하면 /다음 "$*"으로 확장됩니다 a/b/c/....

IFS=/
mkdir -p "$*"

관련 정보