Raspbian,debian:如何使 find $SOURCE 返回 $SOURCE 下的所有目录而不带其本身

Raspbian,debian:如何使 find $SOURCE 返回 $SOURCE 下的所有目录而不带其本身

我使用 rsync 复制包括文件在内的目录,使用 --remove-source-files 让 rsync 删除源文件。不幸的是它不会删除目录所以我想删除所有空目录在下面源 1 和源 2。 find -exec rmdir 命令可以执行此操作,但不幸的是它也会删除 SOURCE 目录本身

复制.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 测试并将 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

来源:删除空目录树(删除尽可能多的目录但不删除文件) 如果不允许,请告诉我

相关内容