Forçar a criação de um diretório inexistente via vi ou touch?

Forçar a criação de um diretório inexistente via vi ou touch?

Existem -popções no mkdircomando para criar diretórios pais conforme necessário

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:~$ 

Existem recursos semelhantes em viou touchcomando?

Neste caso, gostaria de criar um arquivo authorized_keysem um diretório inexistente .sshcom viou touch.

autorizado_keys é um arquivo e não um diretório. Portanto, mkdir -p .ssh/authorized_keyso comando não é aplicável aqui, pois as chaves_autorizadas serão criadas como um diretório, não como um arquivo.

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

Seria possível fazer isso sem mkdir .sshou mkdir -p .ssh?

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

Responder1

Para criar o ~/.sshdiretório, o melhor é deixá- sshlo criá-lo, então você saberá que ele será criado com as permissões corretas.

ssh localhost

(ou :!ssh localhostde dentro vi)

E aceitar a chave para localhost fará com que ssho .sshdiretório e um known_hostsarquivo sejam criados dentro dele.

Para criar o diretório dentro de vi, você também pode fazer:

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

Em vim, você pode fazer

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

ou usando o seu próprio mkdir():

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

Onde %está o arquivo atualmente editado e :hcomo em csh/zsh retorna o dirname (head). Você pode mapear isso para uma tecla ou combinação de teclas ou função personalizada se precisar dela com frequência, embora precise encontrar uma maneira de especificar as permissões (aqui a=,u=rwx/ 0700então apenas o proprietário tem permissão de leitura + gravação + pesquisa para isso) .

Sobre mkdir+touch, veja:Zsh: Como criar um diretório e arquivo dentro dele com um comando?

Responder2

AFAIK, você não pode forçar a criação de um diretório com viou touch.

Você ainda precisa criá-lo mkdirou usá-lo com -psinalizador.

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

Se houver uma maneira de fazer isso viou touch, sinta-se à vontade para atualizar a resposta.

informação relacionada