如何检查文件路径中每个目录(目录树)的可用性。 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
失败的情况下拯救您(假设有一个文件包含您要创建的目录的名称)。
给定一个带有路径的文本文件(每行一个新路径)。
需要从路径创建目录。这很容易完成,就像 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
失败的情况下拯救您(假设有一个文件包含您要创建的目录的名称)。