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반면, OS X의 BSD 파생 cp에는 해당 동작이 없습니다.

cpMac에 GNU를 설치하고 사용하면 원하는 기능을 얻을 수 있습니다 . 이는 아마도 이라는 GNU 패키지의 일부일 것이며 fileutilsHomebrew, MacPorts 또는 Fink를 사용하여 설치할 수 있습니다.

답변2

복사 중인 파일의 상대 디렉터리 구조를 복사하기 위해 Rsync 매개 변수 -R을 사용하여 MAC에서 이 명령을 합성했습니다.

통사론:

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/

CP 대신 RSYNC를 사용하면 약간의 오버헤드가 추가될 것이라고 확신하지만 동일한 결과를 얻습니다.

답변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

관련 정보