디렉토리를 기존 디렉토리로 이동하는 방법은 무엇입니까?

디렉토리를 기존 디렉토리로 이동하는 방법은 무엇입니까?

기본적으로 두 트리의 변경 사항을 병합하여 분기 2의 변경 사항을 분기 1에 적용해야 합니다. 나는 다음과 같은 나무를 가지고 있습니다 :

media
├── cd
│   ├── 0
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   ├── 1
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   └── 2
│       ├── file1
│       ├── file2
│       └── file3
├── dvd
│   ├── 0
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   ├── 1
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   └── 2
│       ├── file1
│       ├── file2
│       └── file3
└── stuff
    ├── 0
    │   ├── file1
    │   ├── file2
    │   └── file3
    ├── 1
    │   ├── file1
    │   ├── file2
    │   └── file3
    └── 2
        ├── file1
        ├── file2
        └── file3

브랜치 2에서 파일을 변경했는데 이를 브랜치 1에 적용해야 합니다. 브랜치 1로 이동하려고 하면 다음 오류가 발생합니다.

mv: cannot move `/branch2/media/cd' to `/branch1/media/cd': Directory not empty.

사용해야 하는 또 다른 명령이 있나요? mv -f이것은 완료되지 않은 것 같습니다.

답변1

대체를 사용하지 않는 이유는 무엇입니까 rsync?

rsync -a /branch2/media/ /branch1/media/

mv움직일 수 없는 이유는 이미 그 안에 하나가 있기 때문 /branch2/media/cd/입니다 . 비어 있지 않은 디렉토리를 파괴하는 것을 거부하십시오./branch1/media/branch1/mediacd/mv

답변2

rsync일반적 으로 다른 버전 제어 도구를 사용하는 것을 선호합니다 .

그래도 크랙하려면 먼저 /branch1/media/에 있는 기존 파일을 삭제하면 됩니다.find

find /branch1/media -type d -exec rm -rf {} \+

그런 다음 행동을 계속합니다.

for i in $(find /branch2/media -type d); do
    mv /branch2/media/$dir /branch1/media
done

환경에 따라 이러한 명령을 약간 조정해야 하지만 작동하지 않을 이유는 없습니다.

추신: 전화할 때는 조심하세요 find -exec rm -rf. 나는 보통 ls사용하기 전에 먼저 find 명령을 확인합니다.rm

관련 정보