-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:~$
vi
或touch
命令中是否有类似的功能?
在这种情况下,我想使用或authorized_keys
在不存在的目录中创建文件。.ssh
vi
touch
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
,或者使用-p
flag 来使用它。
-p, --parents no error if existing, make parent directories as needed
如果有办法用vi
或来做到这一点touch
,请随时更新答案。