AIXのKornShell(ksh)で実行するシェルスクリプトを書いています。mkdir
コマンドを使用してディレクトリを作成したいと思います。しかし、ディレクトリがすでに存在している可能性があります。その場合、私は何もしたくありません。そのため、ディレクトリが存在しないことをテストするかmkdir
、既存のディレクトリを作成しようとしたときにスローされる「ファイルが存在します」エラーを抑制します。
これを行うための最善の方法についての考えはありますか?
AIXのKornShell(ksh)で実行するシェルスクリプトを書いています。mkdir
コマンドを使用してディレクトリを作成したいと思います。しかし、ディレクトリがすでに存在している可能性があります。その場合、私は何もしたくありません。そのため、ディレクトリが存在しないことをテストするかmkdir
、既存のディレクトリを作成しようとしたときにスローされる「ファイルが存在します」エラーを抑制します。
これを行うための最善の方法についての考えはありますか?
回答:
試してくださいmkdir -p
:
mkdir -p foo
これにより、存在しない中間ディレクトリも作成されることに注意してください。例えば、
mkdir -p foo/bar/baz
ディレクトリを作成しますfoo
、foo/bar
とfoo/bar/baz
彼らが存在しない場合。
GNUのような一部の実装にmkdir
はmkdir --parents
、より読みやすいエイリアスが含まれていますが、これはPOSIX / Single Unix Specificationで指定されておらず、macOS、さまざまなBSD、さまざまな商用Unixなどの多くの一般的なプラットフォームでは使用できないため、避ける必要があります。
親ディレクトリが存在しないときにエラーが必要で、存在しない場合にディレクトリを作成したい場合test
は、最初にディレクトリの存在を確認できます。
[ -d foo ] || mkdir foo
mkdir
、Windowsではなく、Unixライクなシステムに関するものです。-p
POSIX / Single Unix Specification準拠には必須なので、これらの仕様に準拠することを意図したものなら何でもサポートされ-p
ます。CygwinやMSYSなどのPOSIXエミュレーションレイヤーを使用しない限り、Windowsはまったく異なります。
mkdir -p
で面白いものを発見しました。括弧を使用できます!{}
コマンドで「複雑な」ディレクトリツリーを作成します。ここを参照してください:technosophos.com/2010/04/15/...
||
代わりに好み&&
ます。シェルが一緒に実行されるerrexit
場合、またはその行が関数、スイッチケースなどの最後の行である場合は重要です。
mkdir
。シェルは、そのような式を、に渡される引数の離散リストに展開しますmkdir
。
これはうまくいくはずです:
$ mkdir -p dir
または:
if [[ ! -e $dir ]]; then
mkdir $dir
elif [[ ! -d $dir ]]; then
echo "$dir already exists but is not a directory" 1>&2
fi
存在しない場合はディレクトリを作成しますが、作成しようとしているディレクトリの名前がディレクトリ以外ですでに使用されている場合は警告します。
1つのコマンドで複雑なディレクトリツリーを定義する
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
mkdir
それ自体の機能ではなく、コマンドを実行するシェルであることに注意してください。これはブレース拡張と呼ばれます-AFAIK、Bash、ksh、zsh、およびCシェルのみがサポートします。
folder name
する代わりにを使用する必要がありますfolder\ name
)
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
mkdirは、Windows 8以降のシステムでは-pスイッチをサポートしなくなりました。
あなたはこれを使うことができます:
IF NOT EXIST dir_name MKDIR dir_name
man mkdir
オプションのマニュアルページを参照-p
-p, --parents
no error if existing, make parent directories as needed
指定されたパスにすべてのディレクトリを作成します。存在する場合はエラーをスローしません。それ以外の場合は、指定されたパスに左から右にすべてのディレクトリを作成します。以下のコマンドを試してください。ディレクトリでnewdir
あり、anotherdir
このコマンドを発行する前に存在しません
正しい使い方
mkdir -p /tmp/newdir/anotherdir
コマンドを実行すると、/ tmpの下に表示されnewdir
、anotherdir
作成されます。このコマンドは何度でも発行できますexit(0)
。コマンドは常にです。このため、ほとんどの人は、実際のパスを使用する前に、このコマンドをシェルスクリプトで使用します。
ifループを使用して、ディレクトリが存在するかどうかを確認できます。存在しない場合は、ディレクトリを作成するよりも存在しないかどうかを確認できます。
1)dir = / home / dir_name
if [ ! -d $dir ]
then
mkdir $dir
else
echo "Directory exists"
fi
2)-pオプションを指定したmkdirを使用してディレクトリを作成し、ディレクトリを作成できます。ディレクトリが使用できないかどうかを確認します。
mkdir -p $dir
mkdir -pを使用すると、ディレクトリのツリー構造を作成することもできます。同じコマンドを使用して親ディレクトリと子ディレクトリを作成する場合は、mkdir -pを選択できます
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
これは、存在しない場合にディレクトリを作成できる単純な関数(bashシェル)です。
#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
if [ ! -d $1 ]
then
mkdir -p $1
fi
}
上記の関数は次のように呼び出すことができます。
createDirectory / tmp / fooDir / BarDir
上記はfooDirとBarDirが存在しない場合は作成します。ディレクトリを再帰的に作成するmkdirコマンドの「-p」オプションに注意してください。お役に立てれば。
mkdir -p sam
if [ !-d $dirName ];then
if ! mkdir $dirName; then # Shorter version. Shell will complain if you put braces here though
echo "Can't make dir: $dirName"
fi
fi