Wie kann ich eine Datei kopieren und gleichzeitig die Zielverzeichnisse erstellen?

Wie kann ich eine Datei kopieren und gleichzeitig die Zielverzeichnisse erstellen?

cp aaa/deep/sea/blob.psdIch möchtebbb/deep/sea/blob.psd

Wie führe ich das Kopieren durch, wenn die Verzeichnisse deepund seadarunter nicht vorhanden sind, bbbsodass beim Kopieren sowohl die benötigten Verzeichnisse erstellt als auch die Datei kopiert wird?

Im Moment bin ich
No such file or directoryso 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 rcpfü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 installProgramm aus demKernel-Dienstprogrammedas typischerweise für genau diesen Zweck von Build-Systemen wieautomarke:

install -D /path/to/source /path/to/destination

Beachten Sie, dass installerstelltalleTeile des Pfades, genau wie mkdir -pes der Fall ist, siehe man install. Ich bin neugierig, warum Sie nicht eingeschlossen habenWarumSie möchten das tun. Anrufen mkdirund cpist 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 cpbietet GNU eine --parentsOption. Sie kommt dem, was Sie wollen, sehr nahe, ist aber nicht genau das.
Sie erstellt auch aaaein Verzeichnis, das Sie anscheinend nicht brauchen. Sie können jedoch zuerst mit cd dorthin wechseln aaaund 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 -poder tar -cf - … | tar -xf -.

verwandte Informationen