Bash 正在检查父目录上的写入权限

Bash 正在检查父目录上的写入权限,bash,directory,parent,Bash,Directory,Parent,我有一个小问题。基本上这个问题很小,但我的解决方案似乎不起作用 我想出的剧本是这样的: 将目录作为$1参数传递。例如:./script.sh/Desktop/folder1/folder1submap/myfolder 如果结构/folder1/folder1submap/myfolder不存在,我必须创建它。这里没有问题,但问题出现了,因为我必须首先检查位置是否可写。我正在用[-w“target”]命令测试它,但它不起作用,因为如果文件夹不存在,-w总是false。就我而言,它不是 解决方案:

我有一个小问题。基本上这个问题很小,但我的解决方案似乎不起作用

我想出的剧本是这样的:

  • 将目录作为$1参数传递。例如:./script.sh/Desktop/folder1/folder1submap/myfolder
  • 如果结构/folder1/folder1submap/myfolder不存在,我必须创建它。这里没有问题,但问题出现了,因为我必须首先检查位置是否可写。我正在用[-w“target”]命令测试它,但它不起作用,因为如果文件夹不存在,-w总是false。就我而言,它不是

    解决方案:是的,如果父文件夹是可写的,我可以检查它,但您不知道是否会得到例如:/Desktop/folder1或类似的/Desktop/folder1/folder2/folder3/folder4/folder5/所以我无法像我想要的那样轻松地检查父文件夹的权限。确切地说,如果从用户那里获得任意长路径,我就无法知道哪个目录是父目录


  • 一个选项是使用
    dirname
    命令:

    if [ ! -d "$1" ] && [ -w "$(dirname $1)" ]; then 
        mkdir "$1"
    fi
    

    一个选项是使用
    dirname
    命令:

    if [ ! -d "$1" ] && [ -w "$(dirname $1)" ]; then 
        mkdir "$1"
    fi
    

    这个解决方案似乎不起作用$1在任何情况下都不是符号链接。您能更具体一点吗<代码>$1/。是一个完全有效的路径(假设
    $1
    是一个目录,而不是一个文件),您应该能够测试它是否像任何其他路径一样可写。是的,我当然可以。我已经测试过了:如果[-w”/home/username/Desktop/folder“],这里我得到了一个真实的评估,正如预期的那样。(文件夹是我桌面上的一个目录)如果[-w”/home/username/Desktop/folder2/。“]这里我得到了一个错误的评估,而folder2在我的桌面上不存在!这就是我因为花哨而得到的<代码>。当然需要存在
    $1
    ,因为它是一个实际的目录条目
    dirname
    $1
    视为一个字符串,因此在
    $1
    不作为目录存在时应该可以工作。对此很抱歉。此解决方案似乎不起作用$1在任何情况下都不是符号链接。您能更具体一点吗<代码>$1/。是一个完全有效的路径(假设
    $1
    是一个目录,而不是一个文件),您应该能够测试它是否像任何其他路径一样可写。是的,我当然可以。我已经测试过了:如果[-w”/home/username/Desktop/folder“],这里我得到了一个真实的评估,正如预期的那样。(文件夹是我桌面上的一个目录)如果[-w”/home/username/Desktop/folder2/。“]这里我得到了一个错误的评估,而folder2在我的桌面上不存在!这就是我因为花哨而得到的<代码>。当然需要存在
    $1
    ,因为它是一个实际的目录条目
    dirname
    $1
    视为一个字符串,因此在
    $1
    不作为目录存在时应该可以工作。很抱歉。