如何检查文件路径中每个目录(目录树)的可用性。 Unix/Bash

How to check availability of each directoriy (directory tree) in a file path. Unix/Bash

给定一个带有路径的文本文件(每行一个新路径)。 需要从路径创建目录。这很容易完成,就像 mkdir -p is/isapp/ip/ipapp。然后chgrp group1 is/isapp/ip/ipapp。但问题是访问权限只会更改最终的 ipapp 目录。并且您需要更改所有新创建目录的访问权限,同时不更改 mkdir -p 命令之前已经存在的目录的访问权限。因此,您需要检查哪些目录已经存在,并且只更改新建目录的权限。下面我尝试从文件中拆分路径,逐渐增加,直到搜索找不到目录的那一刻。然后 chgrp -R 加上未找到的目录路径。下面是我的代码草图。如果有任何帮助,我将不胜感激。

#!/bin/bash
FILE= /(file with paths(in each line new path))
while read LINE; do
IFS='/' read -ra my_array <<< "$my_string"
  if ! [ -d "${my_array[0]}" ]; then
  mkdir -p "${my_array[0]}"
  else -d "${my_array[0]}"/"${my_array[@]}"
done
fi

像这样的东西会起作用:(基本上对于每个目录级别尝试 cd up,如果你不能创建具有适当权限的目录)。

#!/bin/bash
MODE=u+rw
ROOT=$(pwd)
while read PATH; do
        IFS='/' read -r -a dirs <<< "${PATH}"
        for dir in "${dirs[@]}"; do
             [ -d "${dir}" ] || mkdir "${dir}" -m ${MODE} || exit 1
             cd "${dir}"
        done
        cd "${ROOT}"
done

注意:这是从 stdin 读取(因此您必须将文件通过管道传输到脚本中),或者在 done 之后添加 < ${FILE} 以手动将其通过管道传输)。如果文件名中有任何空白字符,则需要 "${dir}""${dirs[@]}" 两边的引号。

exit 1 可以在 mkdir 失败的情况下拯救您(假设有一个文件包含您要创建的目录的名称)。