Linux에서 명령 행 재귀 / 딥 디렉토리 복사?


13

대부분의 경우 작동하는 Linux에서 재귀 / 딥 디렉토리 복사본을 만드는 좋은 일반적인 방법은 무엇입니까? 나는 cp -R정교한 것들과 함께 간단한 것들을 사용했습니다 cpio. 당신이 서로를 선호하게 만드는 중대한 강점이나 약점이 있습니까? 어느 것을 가장 자주 사용하십니까?

답변:


29
NAME
cp - copy files and directories

-a, --archive
   same as -dpR

-d     same as --no-dereference --preserve=links
-p     same as --preserve=mode,ownership,timestamps
-R, -r, --recursive
    copy directories recursively

따라서 귀하의 질문에 대한 답변으로 :

cp -a /foo /bar

심볼릭 링크와 파일 / 디렉토리 'mode' 'ownership'& 'timestamps'를 유지하면서 디렉토리 / foo에서 디렉토리 / bar로 모든 것을 반복적으로 복사하십시오.


이것은 확실히 매우 간단하고 우아한 솔루션입니다. 이 접근 방식의 단점을 발견 한 적이 있습니까? 분산 파일 시스템? 매우 큰 사본? cpio, tar 또는 rsync와 같은 다른 솔루션이 더 효율적인 경우가 있습니까?
Greg Mattes

1
물리적 오류가 없으면 (NFS 또는 Samba 마운트에 관계없이) 로컬에서 마운트 된 모든 위치로 메모리에서 (TB 크기 전송 만 수행 한) 로컬 'cp'오류가 발생하지 않았습니다. 유익한 예제를 보려면 rsync 매뉴얼 페이지에서 'USAGE'를 확인하십시오. 내 마음에 드는 것 : $ rsync --partial --progress --rsh = ssh --archive --verbose --compress foo / user @ hosname : ~ / bar (rsync -avzP)
Gareth

위에서 언급했듯이 -a는 완전히 이식 가능하지 않습니다.
Matthew Flaschen

busybox, GNU & BSD cp는 괜찮습니다. 레거시 유닉스 박스 외에는 그게 효과가없는 것을 본 적이 없습니까? Zoredache의 "정말 일을 올바르게 수행하는 것처럼 보이므로 교체를 찾기가 어려워 보지 않았습니다."라는 완전히 이해했지만 완전히 다른 점은 알 수 없습니다.
Gareth

@gyaresu 우리가 그것에 투표 할 수 있도록 두 번째 의견을 다른 답변으로 나누는 것을 고려하십시오.
Greg Mattes

6

"cd $ srcdir; tar -c. | tar -C $ destdir -x" 와 같은 명령을 가장 자주 사용합니다. 그러나 rsync -a $ src $ dst도 사용합니다.

타르 솔루션의 가장 큰 장점은 몇 년 전 cpio, rsync 또는 cp가 재귀 적으로 복사되지 않은 시스템에서 사용해야한다는 것입니다. 타르는 거의 모든 곳에 있습니다. 내가 그것을 많이 사용했기 때문에 머리에 붙어 있습니다. 아마도 더 우아한 방법이있을 것입니다. 항상 작업을 올바르게 수행하는 것처럼 보이므로 대체품을 찾기가 어려웠습니다.


나는 "타르의 편재성"주장을 많이 좋아한다. 다른 편집 환경을 선호하지만 비슷한 이유로 vi에 능숙합니다.
Greg Mattes

-R은 오랫동안 표준이 아니었지만 ( opengroup.org/onlinepubs/009695399/utilities/cp.html ) -a는 아닙니다.
Matthew Flaschen

@Matthew Flaschen : 귀하의 의견은 @gyaresu의 답변을위한 것입니까?
Greg Mattes

Zoredache가 "재귀 적으로 복사 할 수있는 cp를 가지고 있지 않은 시스템"을 만났다고 말했듯이 이것 또한 관련이있다. 기본적으로 -R-> 휴대용, -a-> 휴대용이 아닙니다.
Matthew Flaschen

1
이것은 ~ 95로 돌아 왔고 시스템은 80 년대 후반의 Unix 버전을 실행하고있었습니다. 나는 -R이 cp의 옵션이라고 생각하지 않지만 확실하지 않습니다. 나는 유즈넷을 읽는 정직한 것을 배웠다.
Zoredache

6

두 개의 디렉토리를 최신 상태로 유지할 때 적은 양의 데이터를 복사하기 때문에 좋아합니다. 가장 간단한 형태의 rsync -a / src / dest


이것은 정말 좋은 지적입니다. 본질적으로 rsync는 "directory diff"를 계산하고 디렉토리를 동기화하는 데 필요한 것만 전송할 수 있습니다. 따라서 rsync -a src / dest와 같은 것을 반복해서 호출하여 디렉토리를 재귀 적으로 "지속적으로 복사"할 수 있습니다 (적절한 동기화를 위해서는 후행 / src가 필요함). 반면 cp -a src / dest는 그렇게 작동하지 않습니다. cp 명령은 첫 번째 cp 이후에 새로운 src 디렉토리를 만듭니다. 후속 사본에는 cp -au src / * dest와 같은 것이 필요합니다.
Greg Mattes

내가 rsync를 좋아하는 다른 이유는 -P 플래그를 전달할 수 있기 때문에 진행률 표시 줄이 표시됩니다. 시간이 얼마나 걸릴지에 대한 아이디어를 제공합니다
Rory

0

rsync훌륭한 도구입니다. 데이터를 전송하는 스위스 군용 칼입니다. 그렇게 간단하고 강력한 도구입니다. 일단 사용을 시작하면 푹 빠지게됩니다.

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