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

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

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

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

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

或者有其他命令可以达到同样的效果?

谢谢

答案1

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

install -Dv /dev/null this_dir/new.txt

(来源:如果需要,Bash 命令创建新文件及其父目录

解释:

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

@rchard2scout 欣慰地指出

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

答案2

我建议使用&&

例子:

mkdir ~/this_dir && touch ~/this_dir/new.txt

交易&&接受新命令。同样mkdir this_dir,完成其余操作。

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

答案3

简单的解决方案,$file以文件形式给出,这应该有效:

mkdir -p $(dirname $file) && touch $file

甚至

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

# then just
touchfile /path/to/file/to/touch/woah

相关内容