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存在しないディレクトリにファイルを作成したいと思います。.sshvitouch

authorized_keys はファイルであり、ディレクトリではありません。したがって、mkdir -p .ssh/authorized_keysauthorized_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作成されます。.sshknown_hosts

内にディレクトリを作成するにはvi、次のようにすることもできます。

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

ではvim

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

または独自の を使用しますmkdir():

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

%現在編集されているファイルはどこにあり、 :hcsh/zsh と同様に dirname (head) を返します。頻繁に必要になる場合は、キーまたはキーの組み合わせ、またはカスタム関数にマップできますが、権限を指定する方法を見つける必要があります (ここではa=,u=rwx0700所有者のみが読み取り + 書き込み + 検索権限を持ちます)。

mkdir+touch については、以下を参照してください。Zsh: 1 つのコマンドでディレクトリとその中にファイルを作成するにはどうすればよいでしょうか?

答え2

vi私の知る限り、または を使用してディレクトリを強制的に作成することはできませんtouch

それでも、 を使用して作成するmkdirか、フラグを使用して使用する必要があります-p

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

viまたはを使用してこれを行う方法がある場合はtouch、お気軽に回答を更新してください。

関連情報