폴더 자체없이 폴더에서 파일을 복사하는 방법


39

A 자체가 없는 A 폴더 에서 파일과 하위 폴더를 복사하려고 합니다. 예를 들어, 폴더에는 다음이 포함되어

| file1.txt   
| file2.txt    
| subfolder1   

다음 명령을 실행하면 잘못된 결과가 나타납니다.

sudo cp -r /home/username/A/ /usr/lib/B/

결과는

/usr/lib/B/A/...copied files...

대신에..

/usr/lib/B/...copied files...

원산지 폴더 없이 원하는 것을 어떻게 얻을 수 있습니까?

답변:


67

고급 cp

cp -r /home/username/A/. /usr/lib/B/

대상 디렉토리가 이미 존재하는지 여부에 관계없이 작동하기 때문에 특히 좋습니다.

쉘 글 러빙

디렉토리에 오브젝트가 너무 많지 않은 경우 쉘 globbing을 사용할 수 있습니다.

mkdir -p /usr/lib/B/
shopt -s dotglob
cp -r /home/username/A/* /usr/lib/B/

rsync

rsync -a /home/username/A/ /usr/lib/B/

/소스 경로의 끝에 중요하다; 대상 디렉토리가 이미 존재하는지 여부에 관계없이 작동합니다.

검색

mkdir -p /usr/lib/B/
find /home/username/A/ -mindepth 1 -maxdepth 1 -exec cp -r -t /usr/lib/B/ {} +

또는 빈 하위 디렉토리가 필요하지 않은 경우 :

find /home/username/A/ -mindepth 1 -type f -exec cp --parents -t /usr/lib/B/ {} +

(없이 mkdir)


첫 번째는 잘 작동합니다! 어떤 아이디어 왜 집 / 이름 / A / * (별 기호)하지 않습니다 의미? 끝에 점이있는 변형이 도움이되었습니다. 감사합니다!
pushandpop

@pushandpop A/*은 의미가 있지만 작동하지 않는 상황이 있습니다.
Hauke ​​Laging

3
shopt입니다 bash특정. 로 zsh사용 *(D). 와 ksh93, FIGNORE='@(.|..)'. cp -tGNU 전용입니다. find이 모두 복사 할 것 같은 사람은 제대로 작동하지 않습니다 A/여러 번 (하위 디렉토리 포함)의 컨텐츠를.
Stéphane Chazelas

1
당신은 또한 -maxdepth 1( -mindepth그리고 -maxdepthGNU 확장을 지원하는 다른 사람들도 있습니다. Portably find .../. ! -name . -prune -exec ....)
Stéphane Chazelas

@ StéphaneChazelas 어딘가에 오타가있는 것 같습니다. find .../.여기에 오류가 발생합니다.
Hauke ​​Laging

10

GNU 시스템 인 경우 man cp:

   -T, --no-target-directory
          treat DEST as a normal file

이를 통해 cp -rT /home/username/A/ /usr/lib/B/정확히 옳은 일 을하도록 글을 쓸 수 있습니다 .


이것은 받아 들여지는 대답이어야합니다. 이것은 쉘 globbing 또는 이외의 것을 사용하는 것보다 타당 cp합니다. 그러나 그것이 -T비 GNU에서는 작동하지 않는 것이 사실입니다 cp.
noraj

3

에게 cp디렉토리의 내용이 아니라 디렉토리 자체를 복사 :

sudo cp -r /home/username/A/* /usr/lib/B/

감사! 그러나 / usr / lib / B / 는 디렉토리가 아닙니다
pushandpop

shopt -s dotglob에 점 파일이있는 경우이 작업을 수행 해야합니다 /home/username/A/.
talkloud

1
@pushandpop 잘, 네. 그것이 당신의 질문에있는 목표이므로 디렉토리라고 가정했습니다. 파일을 복사하기 전에 대상을 작성해야합니다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.