한 디렉토리에서 기존 디렉토리로 파일 복사


248

bash에서 나는 이것을해야한다 :

  1. 디렉토리의 모든 파일을 가져옵니다

  2. 기존 디렉토리에 복사

어떻게해야합니까? 나는 시도했다 cp -r t1 t2(t1과 t2는 기존 디렉토리이고, t1은 파일을 가지고 있음) t2 안에 t1이라는 디렉토리를 만들었지 않기를 원하지 않는다. 어떻게해야합니까?


11
왜 폐쇄 되었습니까? bash 명령이 내장 명령 또는 외부 명령 인 경우 임의적입니다 (예 : printf가 대부분의 시스템에서 둘 다 존재 함). cp질문은 bash프로그래밍 언어 인 질문으로 잘 보일 수 있습니다. 파일 복사에 대한 파이썬 질문이 닫히는 것을 본 적이 없습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功


Bash 셸 복사 명령의 구문에 대한 알림을 찾기 위해 도착했으며이 명령이 Windows 설치의 기본 NTFS 파일 시스템에 대해서도 작동하는 것 같습니다.
David A. Grey

답변:


396

당신이 원하는 것은 :

cp -R t1/. t2/

끝에있는 점은 디렉토리 자체가 아니라 현재 디렉토리의 내용을 복사하도록 지시합니다. 이 방법에는 숨겨진 파일과 폴더도 포함됩니다.


2
나는이 구문을 정말로 좋아하지만 어떤 이유로 든 작동하지 않습니다 mv. 아무도 이유를 알고 있습니까?
Martin von Wittich

2
놀랄 만한. 이것은 어디에 문서화되어 있습니까? POSIX 또는 확장입니까?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

9
@CiroSantilli 六四 事件 法轮功 包 卓 轩 디렉토리를 복사하면 cp는 디렉토리를 생성하고 모든 파일을 그 디렉토리에 복사합니다. "."라는 pretend 폴더 (이 폴더를 보유한 디렉토리와 동일)를 사용하는 경우 복사는이 방식으로 작동합니다. t1에 "file"이라는 파일이 있다고 가정 해 봅시다. cp는 "cp t1 /./ file t2 /./"에 해당하는 작업을 수행합니다. "."폴더를 복사하고 있지만 파일을 t2의 "."에 복사하고 있습니다. "t2 /./"는 "t2 /"와 동일하므로 폴더는 "./"를 제거합니다. 기술적으로 이것은 POSIX가 동작에 내장되어 있음을 의미하지만 예상하지 못한 방식 일 것입니다!
파업

35

한 디렉토리에서 현재 디렉토리 로 무언가를 복사하려면 다음을 수행하십시오.

cp dir1/* .

이것은 숨겨진 파일을 복사하지 않으려는 것으로 가정합니다.


20
숨겨진 파일이 없습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
또한 많은 수의 파일에 대해서도 실패합니다 ( '*'는 무한정 많은 파일로 확장 할 수 없기 때문에.) y
moritzschaefer

32
cp dir1/* dir2

또는 dir1 안에 복사하려는 디렉토리가있는 경우

cp -r dir1/* dir2

3
셸이 어떻게 구성되어 있는지에 따라 숨겨진 파일을 잡으려면 "dir1 / *"대신 "dir1 / * dir1 /.*"를 사용해야합니다.
ssokolow

2
복사 dir1/.*는 dir1 /.을 복사하므로 좋지 않습니다 (예 : 실제로 복사하려는 디렉토리의 부모). 또한 dir1 /을 복사합니다. 이미 (대부분) 복사되어 있다는 것을 제외하고는 괜찮습니다. 따라서 작업을 두 번 수행하고 있습니다.
Gordon Davisson

1
dir1/.*/ hidden files 문제는 복사하려는 디렉토리로 cd 한 다음로 참조하여 해결할 수 있습니다 .. 따라서 숨겨진 파일을 포함하여 모든 파일을 디렉토리에서 기존 디렉토리로 복사하려는 경우 다음을 수행 할 수 있습니다. cd [source dir], cp . [path to destination dir, with no trailing slash].
RobW

8

t1이 파일이 들어있는 폴더이고 t2가 빈 디렉토리라고 가정합니다. 원하는 것은 다음과 같습니다.

sudo cp -R t1/* t2/

첫 번째 예에서 t1과 t2는 전체 경로 또는 상대 경로 (현재 위치에 따라) 여야합니다. 원하는 경우 빈 폴더 (t2)로 이동하여 다음을 수행 할 수 있습니다.

sudo cp -R t1/* ./

또는 파일 (t1)이있는 폴더로 이동하여 다음을 수행 할 수 있습니다.

sudo cp -R ./* t2/

참고 : * 기호 (또는 와일드 카드)는 모든 파일 및 폴더를 나타냅니다. -R 플래그는 재귀 적으로 모든 것을 의미합니다.


2
cp -R t1/ t2

소스 디렉토리의 후행 슬래시는 시맨틱을 약간 변경하므로 디렉토리 자체가 아닌 컨텐츠를 복사합니다. 또한 Bertrand의 답변에 포함 된 글 로빙 및 보이지 않는 파일의 문제를 피합니다 ( t1/*보이지 않는 파일을 복사하지 않으면`t1 / * t1 /.* '사본 t1 /. 및 t1 / ..을 복사하지 않음).


귀하의 솔루션은 적어도하지 (12.10 우분투) 내 설치에,하지 작업을 수행 $ mkdir t1 $ mkdir t2 $ touch t1/one $ touch t1/two $ touch t1/.three $ cp -R t1/ t2 $ ls t2/ t1 (주석 유감없이 codeformat에서이 읽을 수 pastebin.com/yszSxV6G )
zpon

2

일부 세부 사항에 따라 다음과 같이해야 할 수도 있습니다.

r=$(pwd)
case "$TARG" in
    /*) p=$r;;
    *) p="";;
    esac
cd "$SRC" && cp -r . "$p/$TARG"
cd "$r"

... 이것은 기본적으로 SRC 디렉토리로 변경되어 대상에 복사 한 다음 시작한 시점으로 되돌아갑니다.

추가 소란은 상대 또는 절대 목표를 처리하는 것입니다.

(이것은 미묘한 의미에 의존하지 않는 cp나는 확실히 그 아니에요 안정, 휴대용이기 때문에 / ... 명령 자체 ... 그것은 또는 후행하지 않고 소스 사양을 처리하는 방법에 대한, 그리고 신뢰성을 넘어 단지 GNU cp와 I 앞으로도 계속 그렇게 될지 모르겠습니다).


1

일부 디렉토리 내부에서는 "folder1"의 모든 내용을 일부 디렉토리 내의 새 디렉토리 "folder2"로 복사하므로 전체 사용됩니다.

$ (pwd)는 현재 디렉토리의 경로를 가져옵니다.

folder1 뒤에있는 점 (.)을 확인하여 folder1 내의 모든 내용을 가져옵니다.

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