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 --parents
Verhalten zu erhalten?
Antwort1
--parents
ist wahrscheinlich ein Nicht-POSIX-Verhalten, das spezifisch für GNU ist cp
, während die BSD-abgeleitete Version cp
von OS X es nicht hat.
Sie können die gewünschte Funktionalität wahrscheinlich erhalten, indem Sie GNU cp
auf Ihrem Mac installieren und verwenden. Es ist wahrscheinlich Teil eines GNU-Pakets namens fileutils
und 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