我有一系列文件夹,子文件夹和这样的文件:
year_folder
month1_folder
day1_folder
filea, fileb
day2_folder
filea
month2_folder
我想要删除超过X天的文件夹和文件。 我试过了
find /c/Documents/year_folder -mtime +5 | xargs rm -rf
此命令行完全适用于我的测试文件夹(在我的计算机上本地)。 但是当我在synology上运行脚本时,它会以某种方式删除整个year_folder。
不幸的是,我不知道如何在synology服务器上测试我的脚本,以了解我做错了什么。
答案 0 :(得分:4)
将其拆分为两部分:
删除超过五天的文件(仅限!)
# for GNU find; see below for POSIX
find "$root" -type f -mtime +5 -delete
删除空目录
# for GNU find; see below for POSIX
find "$root" -depth -type d -empty -delete
当您使用rm -rf
时,如果目录本身在五天内未更新,则您将删除整个目录。但是,如果您创建或修改a/b/c
,则不会更新a
的修改时间(或者,如果修改不要求更新目录本身) ,甚至不是a/b
的那个 - 因此,你的"修改时间超过五天"当你递归地应用它时,规则是破坏性的。
上面唯一的警告是,它可能不会在运行时删除多个空目录层 - 也就是说,如果a/b/c
为空,并且a/b
为空,而不是{{1然后,第一次运行时只能删除c
,并且在删除c
之前可能还需要另一次调用。
POSIX a/b
不支持find
。因此,第一个命令变为:
-delete
同样,它不支持find "$root" -type f -mtime +5 -exec rm -rf -- {} +
。但是,因为-empty
在传递非空目录时会失败,所以很容易让那些引用非空目录的实例失败:
rmdir
如果你不习惯这样做,那么事情就会变得更加棘手。使用shell来测试每个目录是否为空的实现可能如下所示:
find "$root" -depth -type d -exec rmdir -- {} +