假设该目录~/this_dir不存在。
我需要能够运行touch ~/this_dir/new.txt以new.txt在~/this_dir.
有没有一种简单的方法可以让 touch 也创建目录?
或者可以实现相同目的的替代命令?
谢谢
gun*_*ert 44
有一个命令install可以完成您的要求。
install -Dv /dev/null this_dir/new.txt
Run Code Online (Sandbox Code Playgroud)
解释:
install用于复制文件和设置属性(请参阅man install)-D 告诉命令“创建 DEST 的所有主要组件,除了 --target-directory 的最后一个或所有组件,然后将 SOURCE 复制到 DEST” -v 导致显示每个创建步骤(当然可以省略) /dev/null 是源,从哪里复制 this_dir/new.txt 是复制操作的目标。@rchard2scout 谢天谢地指出
install 命令是 GNU Coreutils 的一部分,它被标记为“Essential”。这意味着它基本上总是可用的。
小智 20
我建议使用&&.
例子:
mkdir ~/this_dir && touch ~/this_dir/new.txt
Run Code Online (Sandbox Code Playgroud)
该&&交易接受新的命令。所以mkdir this_dir,剩下的也要做。
这非常有用,因为可以用于所有内容,而不仅仅是用于新文件夹。
小智 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)