Ich möchte einen Befehl (oder wahrscheinlich eine Option für cp), der das Zielverzeichnis erstellt, wenn es nicht existiert.
Beispiel:
cp -? file /path/to/copy/file/to/is/very/deep/there
Ich möchte einen Befehl (oder wahrscheinlich eine Option für cp), der das Zielverzeichnis erstellt, wenn es nicht existiert.
Beispiel:
cp -? file /path/to/copy/file/to/is/very/deep/there
Hier ist eine Möglichkeit, dies zu tun:
mkdir -p `dirname /path/to/copy/file/to/is/very/deep/there` \
&& cp -r file /path/to/copy/file/to/is/very/deep/there
dirname
gibt Ihnen das Elternverzeichnis des Zielverzeichnisses oder der Zieldatei an. mkdir -p `dirname ...` erstellt dann dieses Verzeichnis und stellt sicher, dass beim Aufruf von cp -r das richtige Basisverzeichnis vorhanden ist.
Der Vorteil gegenüber --parents ist, dass es auch dann funktioniert, wenn das letzte Element im Zielpfad ein Dateiname ist.
Und es wird unter OS X funktionieren.
Ich habe es versucht und folgendes Ergebnis erhalten: rsync -a bull /some/hoop/ti/doop/ploop RESULT rsync: mkdir "/some/hoop/ti/doop/ploop" failed: No such file or directory (2) rsync error: error in file IO (code 11) at main.c(675) [Receiver=3.1.2]
@thebunnyrules die müssen Sie den Pfad mit pwd Befehl (siehe :[link ] ( access.redhat.com/documentation/de-US/Red_Hat_Enterprise_Linux/ )) und fügen Sie es korrekt in Ihre Anweisung ein
Wenn ich Ihren Vorschlag richtig verstehe, schlagen Sie vor, dass ich einen vollständigen Pfad zu der von Aka verwendeten Quelle angeben soll: "$(pwd)/bull" in meinem Befehl statt nur den Dateinamen: bull? Die Sache ist die, dass der Fehler bei der Erstellung des Zielverzeichnisses durch rsync liegt, nicht bei der Quelle (bull). Mir scheint, dass rsync ein einfaches mkdir und nicht ein mkdir -p verwendet.
Wie oben von help_asap und spongeman vorgeschlagen, können Sie den Befehl 'install' verwenden, um Dateien in bestehende Verzeichnisse zu kopieren oder neue Zielverzeichnisse zu erstellen, wenn diese noch nicht existieren.
Option 1 install -D filename some/deep/directory/filename
kopiert die Datei in ein neues oder bestehendes Verzeichnis und gibt dem Dateinamen die Standardberechtigung 755
Option 2 install -D filename -m640 some/deep/directory/filename
wie bei Option 1, jedoch mit Dateiname 640 Berechtigungen.
Option 3 install -D filename -m640 -t some/deep/directory/
wie Option 2, jedoch wird der Dateiname in das Zielverzeichnis geschrieben, so dass der Dateiname nicht sowohl in der Quelle als auch im Ziel geschrieben werden muss.
Option 4 install -D filena* -m640 -t some/deep/directory/
wie bei Option 3, aber mit einem Platzhalter für mehrere Dateien.
Es funktioniert gut in Ubuntu und kombiniert zwei Schritte (Verzeichniserstellung und Dateikopie) in einem einzigen Schritt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
縡 Wie man den cp-Befehl alle notwendigen Ordner für das Kopieren einer Datei an einen Zielort erstellen lässt
9 Stimmen
Die akzeptierte Antwort ist falsch (es gibt eine solche Option für cp). Siehe zweite Antwort von Paul Whipp.
1 Stimmen
@Ronenz, ich stimme zu, dass es eine erwähnenswerte Option in GNU gibt
cp
(wie von Paul Whipp beantwortet), aber es ist nicht so allgemein, wie es der OP wollte. Sie kann kopierena/foo/bar/file
までb/foo/bar/file
aber er kann nicht kopierenfile
までb/foo/bar/file
. (d. h. es funktioniert nur, um übergeordnete Verzeichnisse zu erstellen, die im Fall der ersten Datei bereits vorhanden waren, aber es kann keine beliebigen Verzeichnisse erstellen)3 Stimmen
Das sieht nach einem netten Feature-Wunsch für cp aus. Besteht die Möglichkeit, dass wir in naher Zukunft einen solchen Befehlszeilenschalter bekommen?
0 Stimmen
Die akzeptierte Antwort ist teilweise richtig und die zweite Antwort gibt Ihnen diese Möglichkeit nicht. Die Probleme liegen bei
mkdir
Teil. Wie man es im Inneren implementiertcp
Befehl.