Zsh:如何用一个命令创建一个目录并在其中创建文件?

Zsh:如何用一个命令创建一个目录并在其中创建文件?

我很好奇是否可以使用一个命令在该目录中创建一个目录和文件,类似于mkdir -p文本文件和中间目录。

我仔细阅读了touch手册并没有发现什么。我也无法在 unix stackexchange 上找到答案。

有什么方法可以做到这一点(也许不使用其他命令而不是触摸),因为用文件启动新目录是非常常规的任务?

答案1

installGNU 的命令带有coreutils一个选项-D,可以一次性复制文件并创建指向它们的目录(还可以让您指定所有权和权限)。默认情况下,它创建可执行文件,并且不支持 umask,因为它通常分阶段用作开发工具make install

install -m u=rw,go=r -D /dev/null some/new/file

(它创建的目录组件的权限始终是u=rwx,go=rx)。

或者您始终可以将其实现为createZsh 函数,例如:

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%...}

相关内容