rsync를 사용하여 파일이 포함된 디렉터리를 복사하고 --remove-source-files를 사용하여 rsync가 소스 파일을 제거하도록 합니다. 불행히도 디렉토리는 삭제되지 않으므로 빈 디렉토리를 모두 삭제하고 싶습니다.아래에소스1과 소스2. find -exec rmdir 명령이 이 작업을 수행하지만 불행하게도 SOURCE 디렉토리 자체도 삭제됩니다.
copy.sh
SOURCE1="/mnt/download/transmission/complete/"
SOURCE2="/mnt/download/sabnzbd/completed/"
sudo rsync --remove-source-files --progress --ignore-existing -vr /mnt/download/transmission/complete/ /mnt/dune/DuneHDD_1234
sudo rsync --remove-source-files --progress --ignore-existing -vr /mnt/download/sabnzbd/completed/ /mnt/dune/DuneHDD_1234
find $SOURCE1 -not -name "complete" -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;
find $SOURCE2 -not -name "completed" -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;
나는 또한 다음 코드를 시도했다
*
find $SOURCE1 -mindepth 2 -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;
find $SOURCE2 -mindepth 2 -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;
그리고 아니
*
find $SOURCE1 -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;
find $SOURCE2 -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;
mkdir test를 추가하고 SOURCE1을 "/mnt/download/transmission/complete/test"로 변경하면 방금 만든 디렉토리가 항상 삭제되지만 이 작업을 올바른 방식으로 수행하고 싶습니다.
예: 6개의 디렉터리를 만들었습니다.
test10/
test10/test11/
test10/test11/test12/
test10/test11/test12/test
test1/
test1/test2/
test1/test2/test3/
test1/test2/test3/test
copy.sh를 실행한 후 대상의 디렉터리와 파일(test1/test2/test3/test 및 test10/test11/test12/test)의 완벽한 복사본을 얻었고 다음을 포함하여 소스의 디렉터리와 파일을 삭제했습니다. 소스($SOURCE1 및 $SOURCE2) 자체.
소스 디렉토리 자체를 제외하도록 find에 지시하는 방법이 있습니까? 즉, 다음 디렉터리 아래의 모든 내용을 삭제해야 하지만 디렉터리 자체는 삭제하지 않아야 합니다.
SOURCE1="/mnt/download/transmission/complete/"
SOURCE2="/mnt/download/sabnzbd/completed/"
답변1
를 사용하려면 소스 디렉토리 아래 레벨을 먼저 찾도록 find
플래그를 추가해야 합니다 .-mindepth 1
ls -d */
그러나 디렉터리 이름 인쇄 와 같은 다양한 도구를 사용할 수도 있습니다 .
답변2
나는 좀 더 우아한 방법을 찾았습니다.
SOURCE1="/mnt/download/transmission/complete/" # server1
SOURCE2="/mnt/download/sabnzbd/completed/" # server1
DESTINATION="/mnt/dune/DuneHDD_1234/Transfer" # server2
# move downloads to server2
sudo rsync --remove-source-files --progress --ignore-existing -vr $SOURCE1 $DESTINATION
sudo rsync --remove-source-files --progress --ignore-existing -vr $SOURCE2 $DESTINATION
# delete (only) empty directories left behind by rsync
find $SOURCE1 -mindepth 1 -type d -empty -delete # -mindepth:dont delete parent dir,-type d -empty -delete:delete only empty directories
find $SOURCE2 -mindepth 1 -type d -empty -delete
원천:빈 디렉토리 트리 삭제(파일을 삭제하지 않고 가능한 한 많은 디렉토리를 삭제) 허용되지 않으면 알려주세요.