防止 rmdir -p 遍历某个目录

防止 rmdir -p 遍历某个目录

我把这个脚本拼凑到了rsync一些文件上ssh--remove-source-files选项rsync似乎会删除它传输的文件,这正是我想要的。但是,我还希望这些文件所在的目录也消失。

find该命令的当前部分-exec rmdir -p {} ;尝试删除父目录(在本例中为/srv/torrents),但由于没有正确的权限而失败。我想要做的是停止rmdir遍历find运行目录,或者找到另一种解决方案来删除所有空文件夹。我曾考虑过使用某种循环,并在不使用开关的情况下find运行,但我认为这行不通。rmdir-p

本质上,有没有其他方法可以删除父目录下的所有空目录?

#!/bin/bash

HOST='<hostname>'
USER='<username>'
DIR='<destination directory>'
SOURCE='/srv/torrents/'

rsync -e "ssh -l $USER" --remove-source-files -h -4 -r --stats -m --progress -i $SOURCE $HOST:$DIR
find $SOURCE -mindepth 1 -type d -empty -prune -exec rmdir -p \{\} \;

答案1

您可以利用rmdir不会删除非空目录的事实:

rmdir {,.}?*/ 2>/dev/null

或者,如果你的版本rmdir有以下选项:

rmdir --ignore-fail-on-non-empty {,.}?*/

这个看起来很奇怪的 glob 扩展为包含常规目录和隐藏目录,但排除...

find除非您需要获取当前级别以下的目录,否则您不必使用。

编辑:

尝试:

find -type d -empty -delete

这将进行深度优先搜索并删除所有空的嵌套目录。

答案2

你也可以

find $SOURCE -mindepth 1 -type d -empty -prune -print0 | xargs -0 rm -rf

相关内容