폴더 내용을 한 수준 위로 이동


127

압축이 풀린 폴더가 있지만 폴더에 있습니다. 컨텐츠를 한 레벨 위로 올리려면 어떻게해야합니까? SSH를 통해 CentOS에 액세스하고 있습니다.

답변:


189

'myfolder'라는 폴더와 파일 계층 구조에서 원하는 수준으로 올리면 명령은 다음과 같습니다.

mv myfolder/* .

예를 들어 데이터가있는 경우 명령 /home/myuser/myfolder/home/myuser/실행하십시오.


35
또한 일치해야합니다 .*뿐만 아니라 *아카이브가 점 파일을 포함합니다. 또한 마지막에`&& rmdir myfolder`를 추가하여 현재 불필요한 폴더를 제거하십시오. 이것은 mv가 성공을 리턴 할 때만 실행되고 rmdir이 비어 있지 않은 디렉토리를 제거하지 않기 때문에 실행되기 때문에 저장됩니다.
Caleb

에 대한 좋은 지적 .*. 원본 폴더를 제거하는 것은 쉽지 않으며 요청되지 않으므로 OP가 해당 폴더를 처리하도록합니다.
Rudu

1
@Caleb 그것은 모두를 작성할 수 있습니다 *.*한 줄에? 그냥 호기심
리처드

2
@Richard 그렇습니다. 에 대한 인수는 mv이동 대상이 될 마지막 인수를 제외한 모든 소스가됩니다 (여러 소스의 경우 폴더 여야 함).
Caleb

1
나는 강타를 받고있다 :/bin/mv: Argument list too long
dragosrsupercool

26

위의 Rudu의 답변과 의견에서 취한 것을 명확하게하기 위해.

로 시작하는 파일을 포함하여 모든 내용을 이동해야하는 경우 (.htaccess, .git 등) 명령에 *와. *를 모두 포함해야합니다. 이렇게 :

 mv subfolder/* subfolder/.* .

하위 폴더의 내용이 현재 폴더로 이동합니다. 마지막 "."앞의 공백에 유의하십시오.


그것은 작동하지만 난 얻을 mv: rename fake/. to ./.: Invalid argumentmv: rename fake/.. to ./..: Invalid argument
매스로 우는

16

다음과 같은 방법으로 가능합니다.

  • 사용 rsync:

    rsync -vua --delete-after foo/ .
  • 사용 cp하여 rmdir:

    cp -vaR foo/. . && rmdir foo/
  • 사용 mv( dotglob옵션 사용) :

    shopt -s dotglob # Includes filenames beginning with a dot.
    mv -- foo/* .    # Where foo/ is the folder consisting the files.
    shopt -u dotglob # Disables previously enabled dotglob option.
    

    foo/컨텐츠가 한 레벨 위로 이동되는 폴더는 어디에 있습니까 ?

    참조 : help shoptman bash.

  • 사용 mv( 여기 에서 제안 된대로 ) :

    mv foo/* foo/.[^.]* . && rmdir foo/

    참고 :라는 파일이 없습니다 foo/..bar...

    참고 : POSIX 쉘의 경우 필요합니다 [!.].


rsync를 스위치는 무엇을하는 -v, -u, -a-r일을? AFAICT -v는 장황하며, rsync 인쇄에 더 많은 정보를 제공합니다. -u업데이트를 의미합니다-파일이 최신 인 경우에만 복사하십시오. 관련이없는 것 같습니다. -a아카이브를 의미합니다. 그러면 파일의 소유자와 권한이 복사되고 동기화가 반복됩니다. -r재귀를 의미하지만 이미 다룹니다 -a.
rjmunro

-u이미있는 데이터를 이동하는 데 추가 시간을 소비하지 않으려는 경우 (특히 느린 저장 장치의 경우) 유용합니다. 언급했듯이 가 제거되었으므로 제거 -r했습니다 -a.
kenorb 2012

1
mv foo/* foo/.[^.]* .foo/..bar..예를 들어 파일을 놓치게됩니다 . POSIX 쉘의 경우 필요합니다 [!.].
Stéphane Chazelas

rsync -vua --delete-after foo/ .현재 디렉토리에 이미 존재할 수있는 다른 모든 것을 삭제하는 것을 언급해야합니다 .
David

7

그냥 mv 명령을 실행

mv (directory)/* .

디렉토리를 삭제하려면 다음을 추가하십시오.

rm -rf (directory)

(디렉토리)의 상위 디렉토리에 있다고 가정

(디렉토리) 안에 있다면

mv * ../

13
추가 안전 정보 : 디렉토리를 비울 때 디렉토리를 비워두면 rmdir디렉토리 비어 있지 않으면 불만을 제기하고 종료하지만 디렉토리 rm -r와 그 내용을 모두 삭제했을뿐입니다. ( 포카 요케 입니다)
Anko

좋은 지적입니다! 나는 그렇게하지 않는 이유를 생각할 수 없습니다.
Mark Lalor

@MarkLalor .DS_storemacOS 의 유비쿼터스와 같이 숨겨진 파일이있을 수 있습니다 . mv위 의 명령은 dotglob설정 없이 이동하지 않습니다 .
AkselA

0

공유 서버를 사용하는 사람들은 다음과 같은 것을 사용해야합니다

파일을 이동하려면

mv -v ~/public_html/public_html/* ~/public_html/

파일을 복사하려면

cp -a ~/public_html/public_html/* ~/public_html/


2
위의 질문은 내용을 복사하지 않고 이동하는 것에 대해 묻습니다. 원본을 하위 폴더에 남겨두면 파일이 복제됩니다. 또한 "공유"서버이거나 실제로는 이와 관련이 없습니다.
Caleb

1
당신의 권리와 여기에 대한 대답은 ...
Ricardo Havoc

2
편집을 다시하십시오 : 그것은 이미 upvoted 대답 과 다른 점 무엇입니까? 그리고 "공유 서버"는 그것과 어떤 관계가 있습니까? 제발 편집 이 이미 여기에 무엇에 가치를 추가하는 유용한 기여가 될 것입니다 경우 이러한 항목을 설명 할 수 있습니다.
Caleb

1
공유 서버와 관련이없는 공유 서버에 동의하지 않습니다. "dir"이 입력되는 방식은 세상의 차이를 만듭니다 ..
Ricardo Havoc

1
친구 왜 당신이 그렇게 화가? ... 와우 .. 난 약간의 지식을 공유하고 있었다. 우리는 모두 다르게 이해하고 다른 기술적 문제들과 다르게 직면합니다. 좋은 하루 되세요. Caleb ..
Ricardo Havoc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.