Принудительно создать несуществующий каталог через 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:~$ 

Есть ли похожие функции в команде 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, не стесняйтесь обновить ответ.

Связанный контент