我想使用
中的终端写入文件file.txt
/dir1/dir2/dir3/dir4...dirN/file.txt
路径/dir1/dir2/dir3/dir4...dirN/
不存在。如何写入此文件以便即时创建路径?
答案 0 :(得分:3)
只需使用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}
答案 1 :(得分:1)
单独创建目录,然后创建文件:
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