‘cp’명령을 사용하여 디렉토리 내용 복사 문제점은 글 로빙 패턴

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

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

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

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

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

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

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

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



답변

시험:

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


답변

두 개의 디렉토리 a와 b.

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

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

cp -r ./a b

-r = 재귀 적으로.


답변

기본적으로 두 번째 디렉토리가 있으면 cp첫 번째 디렉토리 두 번째 디렉토리 복사 합니다.

예를 들어 디렉토리 를에 cp -r a b복사 합니다 . 존재하지 않는 경우 의 컨텐츠로 작성됩니다 .abba

당신은 복사 할 경우 내용a로를 b사용 (예를 들어 마운트 지점에 전체 파일 시스템을 복사 할 때) :

cp -r a/. b

이전 답변에서와 같이.

또한 -a다른 답변 중 일부에 사용되는은 -dr --preserve=all타임 스탬프, 컨텍스트 및 확장 된 속성과 동일하며 보존됩니다.


답변

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

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

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


답변

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

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

부모 디렉토리를 제외하지 않으면 ..대상 디렉토리 의 모든 내용으로 끝납니다 .


답변

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

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

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

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

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


답변

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

cp -rf * ^.*