rsync
로컬 파일 시스템에서 많은 수의 파일을 복사하는 대신 이동할 수 있나요 ? 향상된 명령처럼 작동하기를 원합니다 mv
. --remove-source-files
옵션 에 대해 알고 있지만 실제로 파일을 이동하는지(필수) 아니면 복사한 다음 삭제(필수)하는지 여부는 매뉴얼에 나와 있지 않습니다.
편집하다 내가 달성하고 싶은 것은 rsync -r과 동일하지만 기존 디렉터리를 병합하는 디렉터리로 파일을 이동하는 rsync(개선된 mv)입니다.이동하다예를 들어 복사하지 마십시오.
$ tree d1 d2
d1
├── b
├── c
├── d
├── deep_house
│ └── dh1
└── sound
└── sss
d2
├── a
└── deep_house
└── dddx
3 directories, 7 files
$ rsync -r d1/ d2
$ tree d2
d2
├── a
├── b
├── c
├── d
├── deep_house
│ ├── dddx
│ └── dh1
└── sound
└── sss
답변1
Rsync가 파일을 복사합니다. 그것이 바로 그 일입니다. 소스 파일을 삭제하라고 지시하더라도 대상이 동일한 파일 시스템에 있더라도 이동하지 않고 먼저 복사합니다.
이것mv
GNU coreutils의 유틸리티-u
대상 위치가 원본 위치보다 오래되었거나 아직 존재하지 않는 경우에만 파일을 이동하도록 선택할 수 있습니다 . 이는 rsync 와 유사합니다 -u
.
디렉터리 트리를 기존 디렉터리 트리로 이동하려는 경우 mv
각 파일을 호출하는 재귀 순회를 사용할 수 있습니다. 기존 파일을 덮어쓰지 않으려면 다음을 수행하세요.
cd d1
find . -depth -exec sh -c 'test -e "../d2/$0" || mv "$0" "../d2/$0"' {} \;
기존 파일을 덮어쓰려면 기존 디렉터리와 다른 파일을 구별하고 소스에 일반 파일이 있고 대상에 디렉터리가 있을 때 어떻게 할지 결정해야 합니다.
답변2
rsync
파일을 복사하지만 이동하지는 않습니다.
find
와 를 조합하면 mv
원하는 효과를 얻을 수 있습니다.