Criando diretórios aninhados

Criando diretórios aninhados

Quero escrever um bashscript que obtenha um argumento de linha de comando e crie diretórios aninhados no diretório inicial do usuário. Por exemploa/b/c

mkdir -p $1/$2/$3

Mas quero criar não apenas três níveis de diretórios, quero obter o argumento de linha de comando 3 ou 5 e criar a quantidade necessária de diretórios aninhados

Responder1

#!/bin/sh

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

A expansão de "$*"será uma string entre aspas simples que consiste em todos os argumentos do script concatenados junto com o primeiro caractere de $IFScomo delimitador. É por isso que também $IFSdefinimos /.

Estou executando isso em um subshell para evitar a configuração IFSdo restante do script (isso altera o comportamento de certas coisas, como o readfuncionamento). Se não houver mais nada no roteiro, você pode sair (e )sair.

Teste:

$ 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

Responder2

Você pode definir o separador entre campos $IFScomo /e "$*"expandir para a/b/c/...:

IFS=/
mkdir -p "$*"

informação relacionada