it-swarm-korea.com

'cp'명령을 사용하여 디렉토리 내용 복사

한 디렉토리의 모든 내용을 다른 디렉토리에 어떻게 복사합니까?

예를 들면 다음과 같습니다.

$ cd /home/newuser
$ cp -a /backup/olduser/* .

위의 문제점은 글 로빙 패턴 '*'이 숨겨진 디렉토리 '.'와 일치한다는 것입니다. 그리고 '..'을 입력하면 내용뿐만 아니라 'newuser'안에 'olduser'디렉토리가 생깁니다.

다음과 같이 할 수도 있습니다 :

$ rmdir /home/newuser
$ cp -a /backup/olduser /home/newuser

그러나 새로운 사용자가 이미 기본 파일과 디렉토리를 가지고 있다면 어떨까요?

기본 'cp'명령과 셸을 사용하여 한 디렉토리의 내용을 다른 디렉토리로 옮기는 가장 간단하고 정확하며 기억하기 쉽고 엉망인 방법은 무엇입니까?

35
nomount

시험:

cp -ra /backup/olduser/. /home/newuser
32
user4358

두 개의 디렉토리 a와 b.

둘 다 파일을 가지고 있습니다.

A와 b가 포함 된 디렉토리에 있습니다.

cp -r ./a b

-r = 재귀 적으로.

23
Rich Bradshaw

기본적으로 cp는 두 번째 디렉토리가있는 경우 첫 번째 디렉토리 into 두 번째 디렉토리를 복사합니다.

예를 들어 cp -r a b디렉토리ab에 복사합니다. b가 없으면 a의 내용으로 작성됩니다.

acontentb에 복사하려면 (예 : 전체 파일 시스템을 마운트 지점에 복사 할 때) 다음을 사용하십시오.

cp -r a/. b

이전 답변에서와 같이.

-a는 다른 답변 중 일부에 사용되며 -dr --preserve=all 및 타임 스탬프, 컨텍스트 및 확장 된 속성을 유지합니다.

19
Nicolas Bonnefon

쉘을 심각하게 재구성하지 않으면 글 로빙 패턴 '*'이 '.'와 일치하지 않습니다. echo * 만 사용하여 확인할 수 있으므로 또는 '..'. 대신 이름이 '.'로 시작하는 파일을 생략하면 숨겨진 파일이 모두 사라집니다. 쉘 옵션 (예 : bash의 dotglob 옵션)을 사용하여이 동작을 조정할 수 있지만 원하는 이식성 및 강력한 옵션은 아닙니다.

이 작업을 한 번 또는 두 번 이상 수행해야하는 경우 신중하게 제작 된 소스 및 대상 사양을 사용하여 특정 요구에 따라 rsync 또는 unison을 살펴 보는 것이 좋습니다.

또 다른 대안은 소스 디렉토리를 tarball에 넣고 기존 대상 디렉토리에서 untar하는 것입니다.

6
Peter Eisentraut

부모 디렉토리 (..)는 제외하고 일반 파일과 숨겨진 파일을 모두 복사합니다.

cd /directory/to/copy
cp -r * .[^.]* /destination/directory

부모 디렉토리를 제외하지 않으면 대상 디렉토리에 ..의 모든 내용이 포함됩니다.

2
mch

이것은 숨겨진 디렉토리를 제외한 모든 파일과 디렉토리를 현재 디렉토리에서 재귀 적으로 복사하는 데 효과적입니다.

cp -rf * ^.* 
0
Seeeve

점으로 시작하는 파일을 복사하려면 cp. * target /

가장 쉬운 방법은 cp 명령을 두 번 수행하는 것입니다.

피터 아이젠 트라우트 (Peter Eisentraut)는 일반적인 글 로빙 규칙에는 .. 및. (음,이 문장을 어떻게 끝 낼까?;)

-r을 사용하여 재귀를 만들고 -i를 사용하여 cp가 실제로 파일을 덮어 쓸 것인지 묻습니다.

cp -ri /backup/olduser/* /newuser/
cp -ri /backup/olduser/.* /newuser/
0
gaqzi