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


155

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

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

나는 한 ./backup디렉토리를 가지고 느릅 나무 base와 test. 이제이 디렉토리를로 이동하고 싶습니다 ./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

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

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

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

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

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