Mac 上的「cp --parents」等效項

Mac 上的「cp --parents」等效項

這個主題對此進行了解釋——基本上我有一個在 Linux 系統和帶有 Cygwin 的 Windows 系統上使用的 bash 腳本,其中以下命令完美運行:

cp --parents

但是,在 Mac 上的終端​​機中執行相同的命令會出現以下錯誤:

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

我在這種情況下使用命令將選擇的檔案清單複製到輸出目錄中並保留其目錄結構:

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

我可以做什麼來獲得這種cp --parents行為?

答案1

--parents可能是 GNU 特有的非 POSIX 行為cp,而 BSD 衍生的cp沒有它。

cp您可以透過在 Mac 上安裝 GNU 並使用它來獲得您想要的功能。它可能是名為 的 GNU 軟體包的一部分fileutils,您可以使用 Homebrew、MacPorts 或 Fink 來安裝它。

答案2

我設法在 MAC 上合成此命令,方法是使用 Rsync 參數 -R 來複製我正在複製的檔案的相對目錄結構。

句法:

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

用法:

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

這得到了相同的結果,儘管我確信使用 RSYNC 而不是 CP 可能會增加一些開銷

答案3

你有basename?如果是這樣:

$ 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

相關內容