【发布时间】:2020-10-26 16:54:29
【问题描述】:
我正在尝试创建一个 bash 命令/脚本来删除目录中早于 X 天且以某个子字符串开头的所有文件。
例如,如果我们的目录包含文件
-rw-r--r-- 1 root root 0 Jun 30 10:22 foo_5
-rw-r--r-- 1 root root 0 Jun 29 10:22 bar_4
-rw-r--r-- 1 root root 0 Jun 29 10:22 foo_4
-rw-r--r-- 1 root root 0 Jun 28 10:22 bar_3
-rw-r--r-- 1 root root 0 Jun 28 10:22 foo_3
-rw-r--r-- 1 root root 0 Jun 27 10:22 bar_2
-rw-r--r-- 1 root root 0 Jun 27 10:22 foo_2
-rw-r--r-- 1 root root 0 Jun 26 10:22 foo_1
我们要删除所有foo* 文件,除了最近的 2 个文件。这将导致目录
-rw-r--r-- 1 root root 0 Jun 30 10:22 foo_5
-rw-r--r-- 1 root root 0 Jun 29 10:22 bar_4
-rw-r--r-- 1 root root 0 Jun 29 10:22 foo_4
-rw-r--r-- 1 root root 0 Jun 28 10:22 bar_3
-rw-r--r-- 1 root root 0 Jun 27 10:22 bar_2
我目前只能删除除 2 个最近的文件之外的所有文件,这将影响 bar* 文件。
ls -t | tail -n +4 | xargs rm --
我们如何才能将我们的删除限制为以某个字符串开头的文件?
创建测试文件的代码
(
touch -d "6 days ago" foo_5
touch -d "7 days ago" foo_4
touch -d "7 days ago" bar_4
touch -d "8 days ago" foo_3
touch -d "8 days ago" bar_3
touch -d "9 days ago" foo_2
touch -d "9 days ago" bar_2
touch -d "10 days ago" foo_1
)
【问题讨论】:
-
试试
ls -t foo*。 -
为什么不能使用
find?如果您要查找已修改或-atime仅用于访问,请查找-mtime属性 -
@Inian :使用这种方法,您只能找到在某个时间之前修改过的文件。这不是 OP 想要的。
-
@user1934428:是的,同意,但正在寻求他们的澄清,为什么不考虑使用
find