한 디렉토리의 모든 내용을 다른 디렉토리에 어떻게 복사합니까?
예를 들면 다음과 같습니다.
$ 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
복사 합니다 . 존재하지 않는 경우 의 컨텐츠로 작성됩니다 .a
b
b
a
당신은 복사 할 경우 내용 의 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 * ^.*