shell find -delete "目录不为空"

gra*_*ndd 46 shell scripting find

我尝试删除 Synology NAS 上超过 30 天的备份文件。这些文件位于从我的网络服务器下载备份文件期间创建的目录中。
下载后,我想检查 -mtime 然后删除旧文件。

脚本来了:

#!/bin/sh

## Datum auslesen
datum=`date +%Y-%m-%d_%H-%M`

## Mit wget die Datei AutoBackupDB-1.zip laden und in einem Ordner mit Datum uns Uhrzeit speichern 
wget -m -P /volume1/Austauschordner/backup_xyz/$datum/ ftp://backup:backup@domain.tdl/AutoBackupDB-1.zip
echo "Backup von xyz wurde erstellt! "

## finde alle Ordner in einem angegebenen Verzeichnis mit dem Suchnamen die älter als die angegebenen Tage sind und lösche diese
find /volume1/Austauschordner/ -type d -name 'backup_*' -ctime +30 -delete
Run Code Online (Sandbox Code Playgroud)

如果我运行这个脚本,它会告诉我“目录不为空”并且不会删除任何内容。

是否有一种简单的方法或选项可以删除目录中的所有内容?

Jas*_*ush 65

正如@Stephen Kitt 所提到的,这在很大程度上是find -delete的副本,它不会删除非空目录,这表明您正在告诉它删除目录,但目录不是空的(就像运行rm some_nonempty_directory没有-r 标志至少)。

话虽如此,如果您替换-delete-exec rm -rv {} +-exec rm -rv {} \;那么您的脚本应该以递归方式删除目录而不会出错(v如果您不想在测试后进行详细输出,请删除该标志)。

注意:+最后将导致rm -rv file1 file2 ...while 动作\;将是rm -rv file1; rm -rv file2; ...

  • 作为补充,我更喜欢为此目的使用 xargs。用 `xargs rm -rv` 管理你的命令 (10认同)
  • `-exec rm -r {}` 的问题在于 `find` 尝试不知道该命令删除了文件,因此当它尝试递归到目录中时会抛出错误。 (3认同)