cp aaa/deep/sea/blob.psd
Ich möchtebbb/deep/sea/blob.psd
Wie führe ich das Kopieren durch, wenn die Verzeichnisse deep
und sea
darunter nicht vorhanden sind, bbb
sodass beim Kopieren sowohl die benötigten Verzeichnisse erstellt als auch die Datei kopiert wird?
Im Moment bin ich
No such file or directory
so verwirrt, dass weder Tiefe noch Meer existieren.
Ich habe die Hilfeseiten für Männer und andere Fragen durchgesehen, aber nichts fällt mir auf.
Das Nächstliegende, was mir einfällt, ist die Verwendung rcp
für das Verzeichnis:
rcp -r aaa/deep/sea/ bbb/deep/sea/
allerdings kopiert dies das ganze Verzeichnis und den Inhalt und ich will nur die eine Datei. Der Versuch, dies zu tun, gab jedochcp: cannot create regular file bbb/deep/sea/blob.psd' such file or directory
Antwort1
Mit dem install
Programm aus demKernel-Dienstprogrammedas typischerweise für genau diesen Zweck von Build-Systemen wieautomarke:
install -D /path/to/source /path/to/destination
Beachten Sie, dass install
erstelltalleTeile des Pfades, genau wie mkdir -p
es der Fall ist, siehe man install
. Ich bin neugierig, warum Sie nicht eingeschlossen habenWarumSie möchten das tun. Anrufen mkdir
und cp
ist ganz einfach.
Antwort2
Versuchen Sie in dieser Situation die folgende Funktion zu verwenden:
copy_wdir() { mkdir -p -- "$(dirname -- "$2")" && cp -- "$1" "$2" ; }
und verwenden Sie es als
copy_wdir aaa/deep/sea/blob.psd bbb/deep/sea/blob.psd
Übrigens cp
bietet GNU eine --parents
Option. Sie kommt dem, was Sie wollen, sehr nahe, ist aber nicht genau das.
Sie erstellt auch aaa
ein Verzeichnis, das Sie anscheinend nicht brauchen. Sie können jedoch zuerst mit cd dorthin wechseln aaa
und Folgendes kopieren:
cd aaa && cp --parents deep/sea/blob.psd ../bbb/
Antwort3
Mit Standardbefehlen (POSIX/Unix) haben Sie:
pax -rws ':^:dest/dir/:' file .
Antwort4
cd aaa
pax -rw deep/sea/blob.psd ../bbb
Wenn Sie dies nicht haben pax
(es ist von POSIX als Standardersatz für cpio und tar vorgeschrieben, die zu viele Inkompatibilitäten für eine Standardisierung aufwiesen), verwenden Sie stattdessen cpio -p
oder tar -cf - … | tar -xf -
.