写入其路径尚不存在的文件

时间:2014-06-09 06:01:33

标签: bash terminal directory

我想使用

中的终端写入文件file.txt
/dir1/dir2/dir3/dir4...dirN/file.txt

路径/dir1/dir2/dir3/dir4...dirN/不存在。如何写入此文件以便即时创建路径?

2 个答案:

答案 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