재귀 적이며 덮어 쓰지 않는 파일 복사?


21

CoffeeScript / JavaScript 파일을 포함하는 다른 폴더가 많은 디렉토리가 있습니다. CoffeeScript 파일을 동일한 폴더 구조의 새 폴더로 컴파일 할 수 있습니다.

내가하고 싶은 일은 소스 폴더의 모든 * .js 파일을 대상 폴더에 재귀 적으로 복사하는 것입니다. 또한 대상 폴더에 이미있는 파일을 덮어 쓰고 싶지 않습니다. 이것을 달성하는 방법에 대한 생각이 있습니까?

나는 사용하여 시도 cp -n source/**.js desination/cp -Rn source/**.js desination/다른 유사한 질문을보고 후,하지만 제대로 동작하지 않습니다.

이것을 달성하는 방법에 대한 아이디어가 있습니까?


rsync를 살펴 보셨습니까?
bonob

@bonob 난 아니에요. 한두 번 사용했지만 파일을 원격으로 가져 오는 데만 사용했습니다.
AlbertEngelB

답변:


25

rsync를 사용할 수 있습니다 (로컬 복사도 수행함)

rsync -r --ignore-existing --include=*/ --include=*.js --exclude=* source/ destination
  • -r 디렉토리로 재귀하기 위해
  • --ignore-existing 대상의 기존 파일을 무시하려면
  • includeexclude평균 필터는 : 모든 *의 .js 파일을 포함 나머지 부분을 제외, 모든 디렉토리를 포함한다; 첫 번째 포함이 필요합니다. 그렇지 않으면 최종 제외도 컨텐츠를 스캔하기 전에 디렉토리를 제외합니다.

마지막으로 -P진행 상황 --list-only을 보려는 경우, 실제로 복사하지 않고 복사 -t할 내용을 보려는 경우 및 타임 스탬프를 유지하려는 경우를 추가 할 수 있습니다.


이것은 관련이 없지만 최근 15 년간의 문서를 한 파티션에서 다른 파티션으로 옮길 때 rsync 명령을 배웠습니다. 내 파일이 있다는 확신을 갖고 이전 파티션을 지우고 다른 것들을 넣었습니다. 나중에 모든 타임 스탬프를 잃어 버렸다는 것을 깨달았고 -t 플래그를 발견했습니다. 단지 내 고통을 나누고 싶었습니다 : '(


하하,이 일했다! rsync분명히 폭탄입니다.
AlbertEngelB

3
예, 거의 알지 못하지만 귀하의 질문에 대답하려고 노력함으로써 그것에 대해 많은 것을 배웠습니다. 나중에 더 나아가 야 할 경우 파일에서 복잡한 필터를 정의하고 예를 들어 명령에서 호출 할 수 있습니다. 디렉토리 별 필터를 사용하거나 복사 할 때 데이터를 압축 할 수도 있습니다.
bonob

7

이것은 cp를 사용하여 달성 할 수도 있습니다. 여길 봐:

sudo cp -vnpr /xxx/* /yyy

xxx = 소스

yyy = 대상

v = 상세

n = 클로버 없음 (덮어 쓰기 없음)

p = 권한 유지

r = 재귀


5

매뉴얼 페이지를 보면 -n옵션 을 원하는 것 같습니다 .

-n, --no-clobber
   do not overwrite an existing file (overrides the previous -i option)

-n을 사용하려고 시도했지만 * .js 파일로 필터링 할 수 없습니다.
AlbertEngelB

0

내 배포판에는 클로버를 사용할 수 없으므로 다음과 같이하십시오.

echo n | cp -vipr xxx yyy

xxx = 소스

yyy = 대상

v = 상세

i = 대화식 (덮어 쓰기 프롬프트) | 그렇기 때문에 명령 앞에 "echo n |"이 붙습니다.

p = 권한 유지

r = 재귀

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.