我很好奇是否可以使用一个命令在该目录中创建一个目录和文件,类似于mkdir -p
文本文件和中间目录。
我仔细阅读了touch
手册并没有发现什么。我也无法在 unix stackexchange 上找到答案。
有什么方法可以做到这一点(也许不使用其他命令而不是触摸),因为用文件启动新目录是非常常规的任务?
答案1
install
GNU 的命令带有coreutils
一个选项-D
,可以一次性复制文件并创建指向它们的目录(还可以让您指定所有权和权限)。默认情况下,它创建可执行文件,并且不支持 umask,因为它通常分阶段用作开发工具make install
。
install -m u=rw,go=r -D /dev/null some/new/file
(它创建的目录组件的权限始终是u=rwx,go=rx
)。
或者您始终可以将其实现为create
Zsh 函数,例如:
create() {
local file ret=0
for file do
mkdir -p -- "$file:h" && true >> "$file" || ret=$?
done
return "$ret"
}
虽然创建了一个空的常规文件对我来说似乎有点毫无意义。
一般来说,你会这样做:
mkdir -p some/dir
your-editor some/dir/some-file
创建某些文件(将文件(包含实际内容)保存在编辑器中后立即创建)。
或创建一些内容的任何其他命令,例如:
some-command > some/dir/some-file
wget -o some/dir/some-file https://example.com/whatever
cp source some/dir/some-file
...etc.
答案2
这就是我所拥有的,
#!/bin/zsh -
### Create a text file ###
[[ -z $1 ]] && exit 1
file="$1"
mkdir --parents ${file:h}
$EDITOR $file
该命令被称为ct
(创建文本),所以我像这样运行它:ct path/to/dir/file.txt
。
与其他线程中的其他答案不同,这不会对 进行不必要的调用,也不会使用ordirname
的(可以说)更密集的语法。它也不需要是一个函数,因为它不会改变 shell。${file#...}
${file%...}