AIX üzerinde KornShell (ksh) altında çalışacak bir kabuk betiği yazıyorum. Bir dizin oluşturmak için mkdir
komutunu kullanmak istiyorum. Ancak dizin zaten var olabilir, bu durumda hiçbir şey yapmak istemiyorum. Bu yüzden ya dizinin var olup olmadığını test etmek ya da mkdir
komutunun var olan bir dizini oluşturmaya çalıştığında attığı "File exists" hatasını bastırmak istiyorum.
Bunu en iyi nasıl yapabileceğimiz konusunda bir fikriniz var mı?
Deneyin mkdir -p
:
mkdir -p foo
Bunun aynı zamanda var olmayan ara dizinleri de oluşturacağını unutmayın; örneğin,
mkdir -p foo/bar/baz
eğer mevcut değillerse foo
, foo/bar
ve foo/bar/baz
dizinlerini oluşturacaktır.
GNU mkdir
gibi bazı uygulamalar daha okunabilir bir takma ad olarak mkdir --parents
içerir, ancak bu POSIX/Single Unix Specification'da belirtilmemiştir ve macOS, çeşitli BSD'ler ve çeşitli ticari Unix'ler gibi birçok yaygın platformda mevcut değildir, bu nedenle kaçınılmalıdır.
Üst dizinler mevcut olmadığında bir hata almak ve mevcut değilse dizini oluşturmak istiyorsanız, önce dizinin varlığı için test
yapabilirsiniz:
[ -d foo ] || mkdir foo
Bu işe yaramalı:
$ mkdir -p dir
ya da:
if [[ ! -e $dir ]]; then
mkdir $dir
elif [[ ! -d $dir ]]; then
echo "$dir already exists but is not a directory" 1>&2
fi
Eğer mevcut değilse dizini oluşturacak, ancak oluşturmaya çalıştığınız dizinin adı zaten bir dizinden başka bir şey tarafından kullanılıyorsa sizi uyaracaktır.