Äquivalent zu „cp --parents“ auf dem Mac

Äquivalent zu „cp --parents“ auf dem Mac

Das Thema erklärt es – im Wesentlichen habe ich ein Bash-Skript, das ich auf einem Linux-System und einem Windows-System mit Cygwin verwende, wo der folgende Befehl perfekt funktioniert:

cp --parents

Wenn Sie jedoch denselben Befehl auf einem Mac im Terminal ausführen, wird der folgende Fehler angezeigt:

cp: illegal option -- -
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory

In diesem Zusammenhang verwende ich den Befehl, um eine ausgewählte Liste von Dateien in ein Ausgabeverzeichnis zu kopieren und dabei ihre Verzeichnisstruktur beizubehalten:

cp --parents foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

Was kann ich tun, um das cp --parentsVerhalten zu erhalten?

Antwort1

--parentsist wahrscheinlich ein Nicht-POSIX-Verhalten, das spezifisch für GNU ist cp, während die BSD-abgeleitete Version cpvon OS X es nicht hat.

Sie können die gewünschte Funktionalität wahrscheinlich erhalten, indem Sie GNU cpauf Ihrem Mac installieren und verwenden. Es ist wahrscheinlich Teil eines GNU-Pakets namens fileutilsund Sie können es wahrscheinlich mit Homebrew, MacPorts oder Fink installieren.

Antwort2

Mir ist es gelungen, diesen Befehl auf dem MAC zu synthetisieren, indem ich den Rsync-Parameter -R verwendet habe, um die relative Verzeichnisstruktur der Datei zu kopieren, die ich kopiert habe.

Syntax:

rsync -R <list of files to copy> <target dir>

Verwendung:

rsync -R foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

Dies führt zum gleichen Ergebnis, obwohl ich mir sicher bin, dass durch die Verwendung von RSYNC anstelle von CP ein gewisser Mehraufwand entsteht

Antwort3

Haben Sie basename? Wenn ja:

$ for i in `ls foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file`; do cp $i ~/my-output/`basename $i`; done

verwandte Informationen