通过 vi 或 touch 强制创建不存在的目录?

通过 vi 或 touch 强制创建不存在的目录?

-p命令中有选项mkdir可以根据需要创建父目录

wolf@linux:~$ tree
.

0 directories, 0 files
wolf@linux:~$ 
wolf@linux:~$ mkdir dir1/dir2/dir3
mkdir: cannot create directory ‘dir1/dir2/dir3’: No such file or directory
wolf@linux:~$ 
wolf@linux:~$ tree
.

0 directories, 0 files
wolf@linux:~$ 
wolf@linux:~$ mkdir -p dir1/dir2/dir3
wolf@linux:~$ 
wolf@linux:~$ tree 
.
└── dir1
    └── dir2
        └── dir3

3 directories, 0 files
wolf@linux:~$ 

vitouch命令中是否有类似的功能?

在这种情况下,我想使用或authorized_keys在不存在的目录中创建文件。.sshvitouch

authorized_keys 是一个文件,而不是一个目录。因此,mkdir -p .ssh/authorized_keys命令在这里不适用,因为authorized_keys将被创建为目录,而不是文件。

wolf@linux:~$ ls .ssh
ls: cannot access '.ssh': No such file or directory
wolf@linux:~$ 

mkdir .ssh没有or可以做到这一点吗mkdir -p .ssh

wolf@linux:~$ touch .ssh/authorized_keys
touch: cannot touch '.ssh/authorized_keys': No such file or directory
wolf@linux:~$ 

答案1

要创建~/.ssh目录,最好是让其ssh自行创建,然后您就知道它将以正确的权限创建。

ssh localhost

(或:!ssh localhost从内部vi

并接受 localhost 的密钥,将导致在其中ssh创建.ssh目录和known_hosts文件。

要在 中创建目录vi,您还可以执行以下操作:

:!mkdir -m a=,u=rwx .ssh

在 中vim,你可以做

:!mkdir -pm a=,u=rwx %:h

或使用自己的mkdir()

:call mkdir(expand("%:h"),"p",0700)

%当前编辑的文件在哪里,:h就像 csh/zsh 中一样返回目录名(头)。如果您发现自己经常需要它,您可以将其映射到按键或按键组合或自定义功能,尽管您需要找到一种方法来指定权限(此处a=,u=rwx/0700所以只有所有者对其具有读+写+搜索权限) 。

关于mkdir+touch,请参见:Zsh:如何用一个命令创建一个目录并在其中创建文件?

答案2

AFAIK,您不能强制使用vi或来创建目录touch

您仍然需要使用 来创建它mkdir,或者使用-pflag 来使用它。

-p, --parents     no error if existing, make parent directories as needed

如果有办法用vi或来做到这一点touch,请随时更新答案。

相关内容