Pergunta

Eu estou escrevendo um script shell para executar sob a KornShell (ksh) no AIX. Eu gostaria de usar o comando mkdir para criar um diretório. Mas o diretório já exista, caso em que eu não quero fazer nada. Então, eu quero tanto teste para ver que o diretório não existir, ou suprimir o "File existe" erro que mkdir lança quando ele tenta criar um diretório existente.

Qualquer pensamento sobre a melhor forma de fazer isso?

Foi útil?

Solução

Tente mkdir -p :

mkdir -p foo

Note que isto também irá criar quaisquer diretórios intermediários que não existem; por exemplo,

mkdir -p foo/bar/baz

irá criar diretórios foo, foo/bar e foo/bar/baz se eles não existem.

Alguns implementação como GNU mkdir incluem mkdir --parents como um alias mais legível, mas isso não é especificado no POSIX / Individual Unix Specification e não está disponível em muitas plataformas comuns, como MacOS, vários BSDs, e vários Unixes comerciais, por isso deve ser evitado .

Se você quiser um erro quando diretórios pai não existirem, e deseja criar o diretório se ele não existir, então você pode test para a existência do diretório primeiro:

[ -d foo ] || mkdir foo

Outras dicas

Isso deve funcionar:

$ mkdir -p dir

ou

if [[ ! -e $dir ]]; then
    mkdir $dir
elif [[ ! -d $dir ]]; then
    echo "$dir already exists but is not a directory" 1>&2
fi

que irá criar o diretório se ele não existir, mas avisá-lo se o nome do diretório que você está tentando criar já está em uso por outra coisa que não um diretório.

Use o sinalizador -p.

man mkdir
mkdir -p foo

A definição de árvores de diretórios complexos com um comando

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

Se você não quer mostrar qualquer mensagem de erro:

[ -d newdir ] || mkdir newdir

Se você quer mostrar sua própria mensagem de erro:

[ -d newdir ] && echo "Directory Exists" || mkdir newdir

O velho experimentado e verdadeiro

mkdir /tmp/qq >/dev/null 2>&1

vai fazer o que quiser com nenhuma das condições de corrida muitas das outras soluções têm.

Às vezes as soluções mais simples (e mais feios) são a melhor.

mkdir foo funciona mesmo se o diretório existe. Para fazê-lo funcionar somente se o diretório chamado "foo" não existe, tente usar a bandeira -p.

Exemplo: -

mkdir -p foo

Isto irá criar o diretório chamado "foo" somente se ele não existe. :)

directory_name = "foo"

if [ -d $directory_name ]
then
    echo "Directory already exists"
else
    mkdir $directory_name
fi

Ou se você quiser verificar para a existência em primeiro lugar:

if [[ ! -e /path/to/newdir ]]; then
            mkdir /path/to/newdir
fi

-e é o teste existem para shell Korn.

Você também pode tentar googling um manual shell Korn.

mkdir não suporta opção -p mais em sistemas Windows 8 +.

Você pode usar este:

IF NOT EXIST dir_name MKDIR dir_name

Você pode usar se loop para verificar se o diretório existe ou não, se ele não sai do que criar o diretório.

1) dir = / home / dir_name

if [ ! -d $dir ]
then
     mkdir $dir
else
     echo "Directory exists"  
fi

2) Você pode usar o diretório mkdir com a opção -p para criar um diretório. Ele irá verificar se o diretório não está disponível que vai.

mkdir -p $dir

mkdir -p também permite criar a estrutura da árvore do diretório. Se você deseja criar o pai e diretórios filho usando mesmo comando, pode optar mkdir -p

mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2

Esta é uma função simples (shell bash), que permite criar um diretório se ele não existir.

#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
    if [ ! -d $1 ]
        then
        mkdir -p $1
    fi
}

Você pode chamar a função acima como:

createDirectory / tmp / fooDir / BarDir

O acima cria fooDir e BarDir se eles não existem. Note-se a opção "-p" no comando mkdir que cria diretórios de forma recursiva. Espero que isso ajude.

No que se refere ao homem página man mkdir para a opção -p

   -p, --parents
          no error if existing, make parent directories as needed

que irá criar todos os diretórios em um determinado caminho, se existe lança nenhum erro caso contrário ele cria todos os diretórios da esquerda para a direita no caminho fornecido. Tente o comando abaixo. os diretórios newdir e anotherdir não existe antes de emitir esse comando

Uso Correto

mkdir -p /tmp/newdir/anotherdir

Depois de executar o comando que você pode ver newdir e anotherdir criado em / tmp. Você pode emitir o comando quantas vezes quiser, o comando sempre tem exit(0). Devido a este motivo a maioria das pessoas usar este comando em scripts shell antes de usar esses caminhos reais.

mkdir -p sam
  • mkdir = Faça Diretório
  • -p = --parents
  • (nenhum erro, se existente, diretórios pai fazer como necessário)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top