Pertanyaan Bagaimana cara mkdir hanya jika dir belum ada?


Saya menulis skrip shell untuk dijalankan di bawah KornShell (ksh) pada AIX. Saya ingin menggunakan mkdir perintah untuk membuat direktori. Tetapi direktori mungkin sudah ada, dalam hal ini saya tidak ingin melakukan apa pun. Jadi saya ingin menguji baik untuk melihat bahwa direktori tidak ada, atau menekan "File ada" kesalahan itu mkdir melempar ketika mencoba untuk membuat direktori yang sudah ada.

Setiap pemikiran tentang cara terbaik untuk melakukan ini?


1329
2018-04-27 14:47


asal


Jawaban:


Mencoba mkdir -p:

mkdir -p foo

Perhatikan bahwa ini juga akan membuat direktori perantara yang tidak ada; contohnya,

mkdir -p foo/bar/baz

akan membuat direktori foo, foo/bar, dan foo/bar/baz jika mereka tidak ada.

Jika Anda ingin kesalahan ketika direktori induk tidak ada, dan ingin membuat direktori jika tidak ada, maka Anda bisa test untuk keberadaan direktori pertama:

[ -d foo ] || mkdir foo

2307
2018-04-27 14:49



Ini seharusnya berfungsi:

$ mkdir -p dir

atau:

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

yang akan membuat direktori jika tidak ada, tetapi memperingatkan Anda jika nama direktori yang Anda coba buat sudah digunakan oleh sesuatu selain direktori.


109
2018-04-27 14:50



Gunakan tanda -p.

man mkdir
mkdir -p foo

70
2018-04-27 14:50



Mendefinisikan pohon direktori kompleks dengan satu perintah

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

58
2017-08-21 20:08



Jika Anda tidak ingin menampilkan pesan kesalahan apa pun:

[ -d newdir ] || mkdir newdir

Jika Anda ingin menampilkan pesan kesalahan Anda sendiri:

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

20
2018-03-27 03:57



Yang lama mencoba dan benar

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

akan melakukan apa yang Anda inginkan dengan tidak ada kondisi balapan yang banyak dari solusi lain.

Terkadang solusi yang paling sederhana (dan paling jelek) adalah yang terbaik.


17
2018-01-20 12:23



mkdir foo berfungsi bahkan jika direktori ada. Untuk membuatnya berfungsi hanya jika direktori bernama "foo" tidak ada, coba gunakan -p bendera.

Contoh: -

mkdir -p foo

Ini akan membuat direktori bernama "foo" hanya jika tidak ada. :)


10
2017-12-16 11:34



directory_name = "foo"

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

9
2018-04-27 14:51



Atau jika Anda ingin memeriksa keberadaannya terlebih dahulu:

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

-e adalah tes yang ada untuk shell korn.

Anda juga dapat mencoba googling manual shell korn.


7
2017-11-22 12:39