如何在一个命令中创建文件和父目录?

Jef*_*ett 46 command-line directory directory-structure touch mkdir

是否有一个标志/选项touchmkdir>,或其他一些命令,让我产生在同一时间一个文件和任何不存在的父目录?

例如,假设我在一个空文件夹中。现在,如果创建文件夹时父目录不存在,我可以创建它们

mkdir -p nested/folder
Run Code Online (Sandbox Code Playgroud)

我可以在现有目录中创建文件

touch nested/folder/something.txt
Run Code Online (Sandbox Code Playgroud)

但是我无法在尚不存在的目录中创建文件

touch nested/folder/deep/more.txt
Run Code Online (Sandbox Code Playgroud)

触摸:无法触摸“嵌套/文件夹/深度/更多.txt”:没有这样的文件或目录

我如何在创建该deep文件夹的同时创建该文件夹more.txt

小智 36

您可以将这两个命令组合在一行中。如果你使用一个变量,你可以这样做:

file="./nested/folder/deep/more.txt"
Run Code Online (Sandbox Code Playgroud)

然后这个:

mkdir -p "${file%/*}" && touch "$file"
Run Code Online (Sandbox Code Playgroud)

或者像这样一起在一行上:

mkdir -p "./nested/folder/deep" && touch "./nested/folder/deep/more.txt"
Run Code Online (Sandbox Code Playgroud)

这不是一个单一的命令,但它可能会为您完成这项工作。

  • 我推荐 `dirname ${file}` 而不是神秘的 `${file%/*}` (11认同)
  • @BrianUnderwood 用引号括起来可能是个好主意:`mkdir -p "$(dirname "$1")" && touch "$1"` (7认同)
  • 这个问题问到了我一直想要的东西,但是虽然这个答案让我到达了那里,但它并没有给我我想要的东西。所以我想分享我刚刚创建的这个函数`mktouch() { mkdir -p $(dirname $1) && touch $1; }`。我把它放在我的 `.bash_profile` 中,现在我可以执行 `mktouch dir/path/file.ext` 并创建目录并在一个命令中进行触摸 (4认同)
  • mkdir -p parent/child && touch $_/file.txt (2认同)