Como mkdir apenas se um dir não existir?
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?
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)