crontab 中运行的 find 忽略了 maxdepth 开关

crontab 中运行的 find 忽略了 maxdepth 开关

Ubuntu 16.04.2 LTS VMWare 云服务器

在根 crontab 中使用 find 命令时,会忽略 -maxdepth 开关。从命令行运行完全相同的命令时,find 命令会观察到 maxdepth 开关,并且该开关有效。

此命令仅存档目录 /var/www/news 的内容,而不会递归到子目录中(期望的行为):

$ (cd /; find var/www/news -maxdepth 1 -print0) | /bin/tar -C / --null -T - -zcvf /mnt/nfs/Backup-Static-Sites/backupfile.tar.gz

此 root crontab 命令将存档目录 /var/www/news 下的所有内容(完全忽略 -maxdepth 1 开关/不良行为)

10 0 * * * (cd /; find var/www/news -maxdepth 1 -print0) | /bin/tar -C / --null -T - -zcvf /mnt/nfs/Backup-Static-Sites/backupfile.tar.gz

有没有办法在从根 crontab 内部执行 find 命令时激活对 maxdepth 开关的遵守?

答案1

您看到的行为与 无关-maxdepth,这是因为来自命令的文件列表find包含顶级目录,然后由 递归存档tar

当前版本的 GNUtar有一个--no-recursion选项可以关闭递归目录遍历。但是,如果您不想存档空的顶级目录,最简单的解决方案可能是通过在命令中添加-type f! -type d来从列表中省略目录find

10 0 * * * (cd /; find var/www/news -maxdepth 1 ! -type d -print0) | /bin/tar -C / --null -T - -zcvf /mnt/nfs/Backup-Static-Sites/backupfile.tar.gz

答案2

使用目录排除来仅使用 tar 来停止递归,从而消除了 find 的使用。

14 8 * * * /bin/tar -C / -zcvf /mnt/nfs/Backup-Static-Sites/html-News-Snapshot.tar.gz var/www/html-news.domain.tld --exclude "var/www/html-news.domain.tld/dir1"   . . "var/www/html-news.domain.tld/dirN"

本线程中提到的其他技术不起作用,即 --no-recursion 和 -type F ! -type d

相关内容