我想在 Bash 中递归地创建一个目录,首先检查用户是否有权限。我知道这mkdir -p
将创建所有子目录,但关键是我想在执行之前检查用户是否能够执行此操作。
在我的程序中,用户给出了创建目录的路径。让我们假设 vargivenpath
具有 value /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 尚不存在,并且对两个用户都将失败。
关键是如果可能的话,首先要创建目录检查。也许一个解决方案可以从给定的第一级开始对每个目录进行递归检查,直到到达一个不存在的目录,检查最后一个现有的是否有写权限......
我正在考虑的另一种非常肮脏的方法可能是启动mkdir -p
命令并检查退出代码。如果它不同于 0,则一切都清楚,没有权限......如果它是 0 好的,则有权限,但是我应该删除创建的目录,因为我想要检查而不创建目录。
但我不知道该怎么做。有什么帮助吗?谢谢。