Raspbian, debian: find $SOURCE가 $SOURCE 아래의 모든 디렉터리를 자체 없이 반환하도록 만드는 방법 [중복]

Raspbian, debian: find $SOURCE가 $SOURCE 아래의 모든 디렉터리를 자체 없이 반환하도록 만드는 방법 [중복]

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

원천:빈 디렉토리 트리 삭제(파일을 삭제하지 않고 가능한 한 많은 디렉토리를 삭제) 허용되지 않으면 알려주세요.

관련 정보