如果新文件位于不存在的目录中,如何通过触摸创建新文件?

Sti*_*fán 23 command-line

假设该目录~/this_dir不存在。

我需要能够运行touch ~/this_dir/new.txtnew.txt~/this_dir.

有没有一种简单的方法可以让 touch 也创建目录?

或者可以实现相同目的的替代命令?

谢谢

gun*_*ert 44

有一个命令install可以完成您的要求。

install -Dv /dev/null this_dir/new.txt
Run Code Online (Sandbox Code Playgroud)

(来源:必要时创建新文件及其父目录的 Bash 命令

解释:

  • install用于复制文件和设置属性(请参阅man install
  • -D 告诉命令“创建 DEST 的所有主要组件,除了 --target-directory 的最后一个或所有组件,然后将 SOURCE 复制到 DEST”
  • -v 导致显示每个创建步骤(当然可以省略)
  • /dev/null 是源,从哪里复制
  • this_dir/new.txt 是复制操作的目标。

@rchard2scout 谢天谢地指出

install 命令是 GNU Coreutils 的一部分,它被标记为“Essential”。这意味着它基本上总是可用的。

  • 嘿!在使用 UNIX 和 Linux 30 多年之后,我仍然学到了新东西!谢谢。 (11认同)
  • @PRATAP `install` 命令是 [GNU Coreutils](https://www.gnu.org/software/coreutils/manual/) 的一部分,已被标记为“[Essential](https://packages.ubuntu .com/eoan/coreutils)”。这意味着它基本上总是可用的。 (5认同)

小智 20

我建议使用&&.

例子:

mkdir ~/this_dir && touch ~/this_dir/new.txt
Run Code Online (Sandbox Code Playgroud)

&&交易接受新的命令。所以mkdir this_dir,剩下的也要做。

这非常有用,因为可以用于所有内容,而不仅仅是用于新文件夹。

  • 还有`mkdir -p ~/this_dir/that_dir && touch ~/this_dir/that_dir/new.txt`。 (20认同)
  • 我喜欢这个解决方案,因为对于只有基本 nix 知识的人来说,它是最容易理解的解决方案。它也非常描述正在发生的事情。:-) (7认同)
  • **如果`~/this_dir` *确实*存在,则失败**。使用 `mkdir -p` 来解决这个问题。或者,如果该行为是故意的,请在答案中提及。 (3认同)

小智 6

简单的解决方案,$file以文件形式给出,应该可以工作:

mkdir -p $(dirname $file) && touch $file
Run Code Online (Sandbox Code Playgroud)

甚至

# create function
touchfile () {
    local file="$1"
    mkdir -p -- "$(dirname -- "$file")" &&
        touch -- "$file"
}

# then just
touchfile /path/to/file/to/touch/woah
Run Code Online (Sandbox Code Playgroud)