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


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 argument및mv: 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 shopt및 man 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.