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


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.