
В команде есть -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
или 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 возвращает dirname (head). Вы можете сопоставить это с клавишей или комбинацией клавиш или пользовательской функцией, если вам это часто нужно, хотя вам нужно будет найти способ указать разрешения (здесь a=,u=rwx
/ 0700
так что только владелец имеет разрешение на чтение+запись+поиск).
О mkdir+touch см.:Zsh: Как создать каталог и файл внутри него одной командой?
решение2
vi
Насколько мне известно, принудительно создать каталог с помощью или нельзя touch
.
Вам все равно придется создать его с помощью mkdir
или использовать с -p
флагом.
-p, --parents no error if existing, make parent directories as needed
Если есть способ сделать это с помощью vi
или touch
, не стесняйтесь обновить ответ.