it-swarm.com.de

So erstellen Sie mit dem Befehl cp alle erforderlichen Ordner zum Kopieren einer Datei an ein Ziel

Wie kann ich beim Kopieren einer Datei mit cp in einen Ordner, der möglicherweise nicht vorhanden ist, cp veranlassen, den Ordner bei Bedarf zu erstellen? Folgendes habe ich versucht:

[[email protected] nutch-0.9]# cp -f urls-resume /nosuchdirectory/hi.txt
cp: cannot create regular file `/nosuchdirectory/hi.txt': No such file or directory
407
omg

Um Christians Antwort zu erweitern, wäre der einzig verlässliche Weg dies zu tun, mkdir und cp zu kombinieren:

mkdir -p /foo/bar && cp myfile "$_"

Wenn Sie nur ein einziges Verzeichnis in einer vorhandenen Hierarchie erstellen müssen, kann rsync dies in einem Vorgang ausführen. Ich bin ein ziemlicher Fan von rsync als viel vielseitigerem cp Ersatz, in der Tat:

rsync -a myfile /foo/bar/ # works if /foo exists but /foo/bar doesn't.  bar is created.
240
lhunath

Ich wusste nicht, dass du das mit cp machen kannst.

Sie können es mit mkdir tun ..

mkdir -p /var/path/to/your/dir

EDIT Siehe lhunaths answer für die Einbeziehung von cp.

99
Christian

Für diejenigen, die unter Mac OS X arbeiten, ist die Verwendung von dito (allerdings nur auf dem Mac, AFAIK) die einfachste Möglichkeit, dies zu umgehen. Es wird die Verzeichnisstruktur erstellt, die im Ziel fehlt.

Zum Beispiel habe ich das getan

ditto 6.3.2/6.3.2/macosx/bin/mybinary ~/work/binaries/macosx/6.3.2/

wobei ~/work das Binärverzeichnis nicht enthielt, bevor ich den Befehl ausführte.

Ich dachte, Rsync sollte ähnlich funktionieren, aber es scheint, dass es nur für eine Ebene der fehlenden Verzeichnisse funktioniert. Das ist,

rsync 6.3.3/6.3.3/macosx/bin/mybinary ~/work/binaries/macosx/6.3.3/

hat funktioniert, weil ~/work/binaries/macosx existiert hat, aber nicht ~/work/binaries/macosx/6.3.2 /

24
eythort
 mkdir -p `dirname /nosuchdirectory/hi.txt` && cp -r urls-resume /nosuchdirectory/hi.txt
20
Jamie McCrindle

Es gibt keine solche Option. Sie können mkdir -p ausführen, bevor Sie die Datei kopieren

Ich habe ein sehr cooles Skript erstellt, mit dem Sie Dateien an Orten kopieren können, die es nicht gibt

#!/bin/bash
if [ ! -d "$2" ]; then
    mkdir -p "$2"
fi
cp -R "$1" "$2"

Speichern Sie es jetzt, geben Sie ihm Berechtigungen und führen Sie es mit aus

./cp-improved SOURCE DEST

Ich setze -R Option, aber es ist nur ein Entwurf, ich weiß, es kann sein und Sie werden es in vielerlei Hinsicht verbessern. Hoffe es hilft dir

18
victor hugo

Man kann auch den Befehl find verwenden:

find ./ -depth -print | cpio -pvd newdirpathname
16
Jeff King

rsync ist Arbeit!

#file:
rsync -aqz _vimrc ~/.vimrc

#directory:
rsync -aqz _vim/ ~/.vim
10
Chu-Siang Lai