ディレクトリが存在しない場合にのみ Mkdir を実行する
この記事では、mkdir
と、ディレクトリの作成におけるその使用法について説明します。 さらに、作成したいディレクトリが存在しない場合に mkdir
を使用する方法についても説明します。
mkdir
コマンドとその目的
Unix/bash の mkdir
コマンドは make directory を表します。 ユーザーは、フォルダーの作成、アクセス許可の設定などを行うことができます。
mkdir
コマンドを実行するユーザーは、指定されたパスにディレクトリを作成するための十分な権限を持っている必要があります。権限がないと、ユーザーは権限拒否エラーを受け取る場合があります。
mkdir
でディレクトリを作成する
mkdir
の一般的な構文は次のとおりです。
mkdir <specified_option> directory_name
sudo mkdir <specified_option> directory_name # in case user doesn’t have permissions
mkdir
を使用すると、一度に複数のディレクトリを作成することもできます。 これを行うには、カンマ区切りのディレクトリ名を中括弧内に追加します。
ディレクトリ名に余分なスペースを含めないようにしてください。そうしないと、ディレクトリの名前にスペースが含まれてしまいます。 以下のコマンドは、私たちが言ったことを示しています。
mkdir {dir1,dir2,dir3} # here directory names are dir1, dir2 and dir3
ディレクトリが存在しない場合にのみ、mkdir
でディレクトリを作成する
mkdir
を使用する際の問題の 1つは、作成しようとしているディレクトリが既に存在する場合のエラーです。 mkdir
はディレクトリが存在しない場合にディレクトリを作成するため、bash コマンドを実行してもそれほど問題はありません。 それ以外の場合は、適切なエラーが発生します。
ただし、ひねりがあります。 カスタム bash シェルをコーディングしようとしていて、既存のファイルを再作成しようとしているときに mkdir
がエラーを出してほしくないとします。 その後、あなたは何をしますか?
上記を防ぐためのいくつかの方法を説明します。
[[ -d dir_name ]] || mkdir dir_name # option 1
mkdir -p dir_name # option 2
mkdir dir_name 2>/dev/null # option 3
2 番目のオプションは、同時実行中に競合状態になる可能性があるため、2 番目のオプションよりも 1 番目のオプションと 3 番目のオプションをお勧めします。 3つ目は、stderror
の出力をファイル dev/null
にリダイレクトします。
オペレーティング システムを学習したことがあれば、ppfdt
テーブル (プロセス ファイル記述子テーブル) の概念があります。 デフォルトでは、ゼロ記述子は stdin
を指し、1つの記述子は stdout
を指し、2つの記述子は stderror
を指すことを思い出してください。
/dev/null
はヌル デバイス ファイルであり、書き込まれたすべてのものを破棄し、読み取り時にファイル終了文字を返します。 それは真空のようなもので、中に投げ込まれたものを吸い込みます。
そうは言っても、ここで stderror
を任意の未使用ファイルにリダイレクトできますが、/dev/null
の方がより推奨されます。
if
制御構造で mkdir
を使用する
それを行う別の方法は、if
制御構造を使用することです。 ディレクトリが存在するかどうかを確認し、存在しない場合は作成に進みます。 それ以外の場合は、何もしません。
以下のスクリプトで詳しく説明します。
if [ ! -d dir_name ]; then mkdir dir_name; fi