ユーザーが権限を持っているかどうかを最初にチェックするディレクトリを再帰的に作成するようにBashにします。すべてのサブディレクトリが作成されることはわかっていmkdir -p
ますが、ポイントは、ユーザーが実行できるかどうかを確認してから実行することです。
私のプログラムでは、ディレクトリを作成するためにユーザーがパスを指定します。givenpath
value を持つvar を考えてみましょう/root/newdir/anothernewone
。ユーザー root は作成できますが、他の通常のユーザーは作成できません。ユーザーがそれを実行できるかどうかを確認したい。私の非動作アプローチ:
#!/bin/bash
givenpath="/root/newdir/" # This works
#givenpath="/root/newdir/anothernewone/" # This is not working
if [ -d $(dirname "${givenpath}") ]; then
if [ ! -w $(dirname "${givenpath}") ]; then
echo "Error, You don't have write permissions"
else
echo "Yeah, there are permissions"
fi
else
echo "Error, base dir to create subdirs is not existing"
fi
これは完全に機能していません。givenpath
/root/newdir
basedir が/root/
あり、両方のユーザーに対して正しくチェックされているため、これは機能しますが、より多くのサブディレクトリが指定されている場合/root/newdir/anothernewone
、basedir は/root/newdir/
basedir がまだ存在しないため失敗し、両方のユーザーに対して失敗します。
ポイントは、可能であれば最初にディレクトリチェックを作成できるようにすることです。たぶん、1つの解決策は、指定された最初のレベルから始まるすべてのディレクトリの再帰的なチェックを実行して、存在しないディレクトリに到達するまで、最後に存在するディレクトリに書き込み権限があるかどうかを確認することです...
私が考えているもう1つの非常に汚いアプローチは、mkdir -p
コマンドを起動して終了コードを確認することです。0 以外の場合、すべてが明確で、権限がありません... 0 の場合、権限はありますが、ディレクトリを作成せずに確認したいので、作成したディレクトリを削除する必要があります。
しかし、私はそれを行う方法がわかりません。何か助けはありますか?ありがとう。