给定一个可以存在或不存在的文件路径,如何在bash脚本中创建文件夹结构和文件?如何为给定路径创建文件夹结构和文件
实例运行我的脚本(脚本的名称和文件路径为放慢参数传递):
./someTask.sh /folder/structure/file.html
我已经试过的mkdir但它创建一个名为file.html过的文件夹。任何帮助将非常感激。
给定一个可以存在或不存在的文件路径,如何在bash脚本中创建文件夹结构和文件?如何为给定路径创建文件夹结构和文件
实例运行我的脚本(脚本的名称和文件路径为放慢参数传递):
./someTask.sh /folder/structure/file.html
我已经试过的mkdir但它创建一个名为file.html过的文件夹。任何帮助将非常感激。
只是做了(不洙花哨),但简单:
crfile() {
dir=$(dirname "$1")
mkdir -p "$dir" && touch "$1"
}
while read -r path; do
crfile "$path"
done << EOF
some.txt
./some.txt
../some.txt
.././some.txt
../other/some.txt
/some.txt
/sub/some.txt
/sub/../etc/some.txt
EOF
,或者如果你需要从man mkdir
缩短
crfile() { mkdir -p "$(dirname "$1")" && touch "$1"; }
:
-p创建中间目录,需要。如果未指定此选项 ,则每个操作数的完整路径前缀 必须已经存在。另一方面,如果指定了这个选项,如果作为操作数给出的目录已经存在,则报告 没有错误。中间目录通过当前umask修改的rwxrwxrwx(0777)的 权限位以及所有者的写入和搜索权限 创建。
使用dirname
比使用参数替换尝试修改路径要好得多。阅读更多Bash variable substitution vs dirname and basename
是的,如果你愿意,可以添加--
- 如果你期望文件或目录以-
开头,这是很好的...
这是一个仍然非常短的解决方案,但不应导致根目录中的相关文件或文件出现问题。
crfile()
{
[[ ! -e $1 ]] && mkdir -p -- "$1" && rmdir -- "$1" && touch -- "$1"
}
说明:
-p
选项来创建整个结构通过首先创建所需的目标作为目录,然后将其删除并创建为文件,父目录路径(永不提取)或相对路径不再有特殊情况。
将使用mkdir只有在目录结构,而不是文件名通过?然后只需触摸文件。 – 123
您也可以使用install命令'install -Dm644/dev/null/folder/structure/file.html' – 123