mv : 디렉토리가 비어 있지 않음


155

동일한 폴더를 가진 다른 디렉토리 내에서 디렉토리의 내용을 이동하고 싶습니다.

예를 들면 다음과 같습니다.

나는 한 ./backup디렉토리를 가지고 느릅 나무 basetest. 이제이 디렉토리를로 이동하고 싶습니다 ./backupArchives.

나는 이것을 사용한다 :

mv ./backup/* ./backupArchives

하지만 오류가 발생했습니다

mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty

나는 사용하려고 --force했지만 운이 없다. 폴더가 이미 존재할 때 폴더를 옮기는 방법이 있습니까?

참고 : 내용을 병합하고 싶습니다. 덮어 쓰지 않습니다.


폴더 내용을 대상으로 병합하려고하거나 대상에있는 내용을 덮어 쓰려고합니까? (또한 데이터를 자르기 위해 ......을 사용하지 않고 ENTIRE 오류가있는 경우에도 도움이됩니다)
Thomas Ward

내용을 병합하고 덮어 쓰지 않습니다.
UdK

2
@UdK 이것이 작동하더라도 두 디렉토리의 내용을 병합 하지는 않습니다 . 디렉토리를 이동하면 대상이 대체됩니다. rsync대신 살펴보십시오 . 병합 할 것입니다.
zwets

답변:


188

매뉴얼 페이지에 문서화되어 있지 않지만 mv대상 디렉토리에 파일이 포함되어 있으면 디렉토리의 이름을 다른 디렉토리로 바꾸는 것을 거부합니다. 소스의 내용을 대상 에 병합 하려고하지 않기 때문에 이것은 좋은 일입니다 mv.

rsync -a backup/ backupArchives/대신 사용하십시오 . 그 후 rm -rf backup/*.

를 사용하는 대신 rsync클래식을 수행 할 수도 있습니다.

(cd backup && tar c .) | (cd backupArchives && tar xf -)

더 많은 괴짜 포인트를 얻습니다.


4
알아야 할 좋은 것들! 둘 다 잘 작동합니다. 감사!
UdK

5
eek

2
여유 공간에 폴더 크기가 있어야합니다. 그렇지 않으면 끔찍한 문제를 일으킬 것입니다.
Pogrindis

4
@Pogrindis 어떤 끔찍한 문제가 발생하며 풀 디스크에 쓰려는 다른 시도와 어떻게 다른지 설명해주십시오 . 실제로 두 작업 모두 원래 디렉토리를 그대로 유지하기 때문에 작업이 단순히 rm -rf backupArchives결과없이 실패하면 '끔찍한'작업은 물론입니다.
zwets

4
rsync를 사용할 수없는 경우 매우 유용한 고전적인 접근 방식의 이름을 지정해 주셔서 감사합니다! 또한 사용 sudo를 함께 작동sudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
ArendE

39

무엇을하고 있는지 아는 경우 빠르고 더럽습니다.

cp -r ./backup/* ./backupArchives && rm -R ./backup/*

3
또한 내 안전 모드에서 작동합니다.
Banned_User

4

이동 한 디렉토리 후에는 *텍스트 또는 숫자를 나타냅니다. 예를 들면 다음과 같습니다.

mv /var/www/* /recovery/wwwrecovery/

파일을 이동하면 다음과 같이 이동합니다.

mv /var/www/index.php /recovery/index.php

다른 방법은 tar를 사용하여 해당 폴더 내용을 압축하는 것입니다.

tar -cvzpf backup.tar.gz /var/www 

그런 다음 다른 파일로 옮깁니다. 또한 tar는 압축하여 크기를 작게 만들기 때문에이 단계를 권장합니다.

다른 폴더로 파일을 추출하려면

tar -xvzpf /var/www/

소유하지 않은 위치로 복사해야하는 경우 sudo사용하기로 결정한 옵션 뒤에 명령 앞에 명령을 추가하십시오 .

sudo tar -cvzpf backup.tar.gz /var/www/

Ubuntu 12.10을 사용하고 있는데 mv : invalid option- 'R'자세한 내용은`mv --help '를 시도하십시오. 실제로 .tar는 훌륭하지만이 상황에서 파일을 이동하는 방법을 알아야합니다. 도와 주셔서 감사합니다
UdK

12.04 데스크톱 및 서버를 사용하고 둘 다 잘 작동합니다. folfer와 -R 사이에 공간을 만들지 않으면 조심하십시오. 나는 또한 -R없이 나를 위해 같은 방식으로 시도했지만 -R없이 시도하지만 철자를 조심하십시오 : 리눅스는 대문자와 소문자로 중요합니다! 경로가 잘못 이동하거나 위치에서 이동하는 경우보다. 그 폴더를 가지고 있지 않다면 -C를 넣어서 옮기고 폴더를 만듭니다. 또한 먼저 시도하십시오 : 폴더의 -iname 이름을 찾고 루트 에서이 명령을 실행하십시오. 철자가 틀린 경우 다른 위치에 있는지 확인하십시오. 당신이 사용한 정확한 명령을 알려주세요
Dimitris Theodoridis

무엇 thaaa ..... betwen에 그 파일 이름을 넣어 **
Dimitris Theodoridis

1
그것은 -R첫 번째 논쟁 이후에 오지 않아야합니다. 옵션은 (거의) 항상 명령 인수보다 앞에옵니다. 또한 옵션 mv이 없으며 -R마지막으로 재귀는와 관련이 없습니다 mv. @DimitrisTheodoridis 먼저 답변을 테스트하십시오.
zwets

네 내 친구가 맞아, 나는 항상 내 철자에 문제가 있으며, 항상 터미널에 문제가 있거나 명령을 찾을 수 없거나 알 수없는 새로운 파일과 디렉토리를 만들거나, 그냥 철자법을 위해 ... 사용 cp 명령, 여기보다 그 형제에 대한 MV의 sory를 썼다 : D
디미트리 Theodoridis

4

물론 rsync작동하지만 지원하지 않는 시스템 rsync(예 : rsync가 기본적으로 설치되지 않은 cpanel)에서도 작동합니다.

사용은 어떻습니까 :

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

그런 다음 backup필요한 경우 디렉토리를 제거하십시오.

주 : 당신은 필요 cd받는 backup을 실행하기 전에 디렉토리cp -R --parents ...

참고 2 : backupArchives백업에서 새 파일을 가져온 경우 디렉토리를 다시 확인하십시오 .


1

질문하기 전에 간단한 사례를 생각해 봅시다.

우리는 두 개의 폴더가에 / 홈 / 관리자 가정 foobar같은 하위 디렉토리 구조를 가지고있는,하지만 각각은 서로 다른 파일이 포함되어 있습니다. 이제 우리는 그것들을 하나로 병합하고 싶습니다. 와 같은 작업을 수행 mv foo/* bar하면 오류 mv: directory not empty가 발생합니다.

내 솔루션은 명령 줄 도구를 포기하고 돌고래와 같은 GUI 파일 관리자로 전환하는 것입니다. 돌고래에서로 이름 foo을 바꾸면 bar대상 폴더에 쓸 수있는 옵션을 제공하고 기존 파일을 대화식으로 덮어 쓸지 묻습니다. 이렇게하면 복사 및 삭제가 방지되므로 한 줄의 코드 없이도 시간을 절약 할 수 있습니다.

추신 : 나는 모든 파일 관리자를 테스트하지 않았습니다. 그러나 대부분이 기능이 있어야합니다.

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