假设该目录~/this_dir
不存在。
我需要能够运行touch ~/this_dir/new.txt
来new.txt
创建~/this_dir
。
有没有简单的方法可以让 touch 也创建目录?
或者有其他命令可以达到同样的效果?
谢谢
答案1
有一个命令install
可以完成您所要求的事情。
install -Dv /dev/null this_dir/new.txt
解释:
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