【发布时间】:2014-07-29 15:37:41
【问题描述】:
我想在
中使用终端写入文件file.txt
/dir1/dir2/dir3/dir4...dirN/file.txt
路径/dir1/dir2/dir3/dir4...dirN/ 不存在。如何写入此文件以便动态创建路径?
【问题讨论】:
-
更适合 superuser.stackexchange.com,他们会告诉你 mkdir -p
我想在
中使用终端写入文件file.txt
/dir1/dir2/dir3/dir4...dirN/file.txt
路径/dir1/dir2/dir3/dir4...dirN/ 不存在。如何写入此文件以便动态创建路径?
【问题讨论】:
只需使用mkdir -p 即可:
mkdir -p /dir1/dir2/dir3/dir4...dirN/
-p 如果不存在,则创建整个目录结构。如 mkdir 手册页中所述:
根据需要创建中间目录。如果没有这个选项 指定,每个操作数的完整路径前缀必须已经存在。 另一方面,指定此选项后,不会出现错误 如果作为操作数给出的目录已经存在,则报告。 使用 rwxrwxrwx 权限位创建中间目录 (0777) 由当前 umask 修改,加上写入和搜索 所有者的权限。
这里全部用在一个小的shell脚本中;对于此示例,仅上升到 /dir1/dir2/dir3/dir4/:
if [ ! -d /dir1/dir2/dir3/dir4/ ]; then
mkdir -p /dir1/dir2/dir3/dir4/;
fi;
echo "Hello world" >> /dir1/dir2/dir3/dir4/file.txt
或者为了更灵活一点,您可以添加变量甚至使用dirname 来获取文件基本路径:
// Set the filename.
FILENAME="/dir1/dir2/dir3/dir4/file.txt"
// Get the directory basepath by using dirname.
DIRECTORY=$(dirname ${FILENAME})
// If the directory does not exist, create it.
if [ ! -d ${DIRECTORY} ]; then
mkdir -p ${DIRECTORY};
fi
// Now do something like appending text a filename in that directory.
echo "Hello world" >> ${FILENAME}
【讨论】:
单独创建目录然后创建文件:
mkdir -p "/dir1/dir2/dir3/dir4...dirN" && : >> /dir1/dir2/dir3/dir4...dirN/file.txt
注意:如果您只是想确保/dir1/dir2/dir3/dir4...dirN/file.txt 存在,您可以创建这样的函数:
function summon {
mkdir -p "${1%/*}" && : >> "$1"
}
# Application:
FILE="/dir1/dir2/dir3/dir4.txt"
if summon "$FILE"; then
# Do something with "$FILE"
: ...
else
echo "Failed to prepare file $FILE".
fi
【讨论】: