2012-06-28 18 views
19

Unter Linux, ich habe eine --parents Option für den Befehl cp, so kann ichcp --parents Option auf mac

cp --parents test/withintest/go.rb test2 

http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html

Auf Mac tun, ich habe nicht diese Option verfügbar. Gibt es eine Möglichkeit, dies auf Mac zu tun? Warum ist diese Option nicht verfügbar?

PS. Der Zweck --parents ist folgende:

‚--parents‘ den Namen der einzelnen Zieldatei Formular durch einen Schrägstrich an das Zielverzeichnis angehängt und mit dem angegebenen Namen der Quelldatei.

Das letzte Argument, das cp übergeben wird, muss der Name eines vorhandenen -Verzeichnisses sein.

Zum Beispiel der Befehl:

 cp --parents a/b/c existing_dir 

kopiert die Datei a/b/c existing_dir/a/b/c, alle fehlenden Zwischenverzeichnisse zu erstellen.

Antwort

17

können Sie den Befehl ditto unter Mac OS X verwenden:

Die Grundform

ditto <src-path> <dst-path> 

tut, was Sie wollen. Es gibt noch viel mehr Optionen - schauen Sie sich die man page.

+0

Perfect. 'dto einige/dir/structure/file/tmp/irgendein/dir/structure/file' erstellt die Verzeichnisse some/dir/structure unter/tmp, wie gewünscht. – ca2longoria

+5

Ich sehe nicht, wie dies die ursprüngliche Frage beantwortet. 'cp - Eltern a/b/c existing_dir' und' ditto a/b/c existing_dir' scheinen verschiedene Dinge zu tun. – Alec

+1

@alecb Ich denke, die Antwort war, was das OP eigentlich erreichen wollte, anstatt die genaue Methode. Ich habe den gleichen Denkprozess durchlaufen, als ich den 'dito'-Befehl entdeckte. – Echelon

32

Das störte mich auch sehr viel. Eine Abhilfe hierfür könnte die Verwendung von rsync sein.

rsync -R test/withintest/go.rb test2 

hat die gleiche Wirkung wie cp --parents und OS X mit rsync Standard kommt.

2

Sie können die GNU-Version cp mit MacPorts installieren.

Nach MacPorts installieren Sie die coreutils Pakete installieren:

sudo port install coreutils 

Dann werden Sie in der Lage sein, die GNU-Version cp und andere Kerne Versorgungen zu verwenden (ls, date, cat, etc.) durch das Voranstellen Befehl mit einem g:

gcp --parents test/withintest/go.rb test2 

Wenn Sie diesen GNU-Versionen standardmäßig verwendet werden sollen Sie das GNU ist Ihren Pfad aktualisieren hinzufügen können. Fügen Sie folgendes zu Ihrem ~/.bash_profile:

export PATH="/opt/local/libexec/gnubin:$PATH" 
0

würde ich nicht mac cp mit GNU cp ersetzen. Ich würde auch nicht dito verwenden, weil es nicht plattformübergreifend ist.Stattdessen verwenden Cross-Plattform-Tools wie rsync:

rsync <srcDir/srcFile> <dst> 

Ergebnis: dst/srcdir/SRCFILE