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

vitouch指令中是否有類似的功能?

在這種情況下,我想使用或authorized_keys在不存在的目錄中建立檔案。.sshvitouch

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,或使用-pflag 來使用它。

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

如果有辦法用vi或來做到這一點touch,請隨時更新答案。

相關內容