Nicht vorhandenes Verzeichnis über vi oder touch erzwingen?

Nicht vorhandenes Verzeichnis über vi oder touch erzwingen?

Es gibt -pim mkdirBefehl die Möglichkeit, bei Bedarf übergeordnete Verzeichnisse zu erstellen

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

Gibt es ähnliche Funktionen in viunserem touchBefehl?

In diesem Fall möchte ich eine Datei mit oder authorized_keysin einem nicht vorhandenen Verzeichnis erstellen ..sshvitouch

authorized_keys ist eine Datei und kein Verzeichnis. Daher mkdir -p .ssh/authorized_keysist der Befehl hier nicht anwendbar, da authorized_keys als Verzeichnis und nicht als Datei erstellt wird.

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

Wäre es möglich, dies ohne mkdir .sshoder zu tun mkdir -p .ssh?

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

Antwort1

~/.sshAm besten lassen Sie das Verzeichnis sshvon selbst erstellen. Dann wissen Sie, dass es mit den richtigen Berechtigungen erstellt wird.

ssh localhost

(oder :!ssh localhostvon innen vi)

Und wenn Sie den Schlüssel für „localhost“ akzeptieren, werden das Verzeichnis und eine Datei darin ssherstellt ..sshknown_hosts

Um das Verzeichnis darin zu erstellen vi, können Sie auch Folgendes tun:

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

In vimkönnen Sie

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

oder mit einem eigenen mkdir():

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

Wo %ist die aktuell bearbeitete Datei und :hgibt wie in csh/zsh den Verzeichnisnamen (Kopf) zurück. Sie können das einer Taste oder Tastenkombination oder einer benutzerdefinierten Funktion zuordnen, wenn Sie es häufig benötigen, allerdings müssten Sie eine Möglichkeit finden, die Berechtigungen anzugeben (hier a=,u=rwx/ 0700damit nur der Eigentümer Lese-, Schreib- und Suchberechtigung dafür hat).

Informationen zu mkdir+touch finden Sie unter:Zsh: Wie erstelle ich mit einem Befehl ein Verzeichnis und eine Datei darin?

Antwort2

Soweit ich weiß, können Sie mit vioder die Erstellung eines Verzeichnisses nicht erzwingen touch.

Sie müssen es noch mit erstellen mkdiroder mit Flag verwenden -p.

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

Wenn es eine Möglichkeit gibt, dies mit vioder zu tun touch, können Sie die Antwort gerne aktualisieren.

verwandte Informationen