删除所有早于特定文件名的文件吗?

删除所有早于特定文件名的文件吗?

我希望能够查找以 .backup 结尾的最新文件,并删除所有比该文件更旧的文件(但当然保留较新的文件)。

以下是目录列表的示例,您可以看到已完成的多个备份。我希望保留文件 0000000200000000000000083.00000020.backup 和 000000010000000000000082,但以某种方式删除所有较旧的内容。

我可以想到很多黑客方法来实现这一点,比如用 -mtime 进行查找并删除超过一天的数据,这可能对我有用,但不是正确的。我还可以在备份之前列出目录,然后将其与备份之后的目录进行比较,并删除之前的所有文件。但这仍然不正确。

有任何想法吗?

$ ls -ltr
total 131084
-rw-r-----. 1 cm800 cm800        0 May  6 13:58 archive_06_05_14___13_58_05
-rw-------. 1 cm800 cm800 16777216 May  6 13:58 00000001000000000000007F
-rw-------. 1 cm800 cm800 16777216 May  6 13:58 000000020000000000000080
-rw-------. 1 cm800 cm800 16777216 May  6 13:58 000000020000000000000081
-rw-------. 1 cm800 cm800      242 May  6 13:58 00000001000000000000007F.00000020.backup
-rw-------. 1 cm800 cm800      242 May  6 13:58 000000020000000000000081.00000020.backup
-rw-------. 1 cm800 cm800 16777216 May  6 14:03 000000010000000000000080
-rw-------. 1 cm800 cm800 16777216 May  6 14:06 000000020000000000000082
-rw-------. 1 cm800 cm800 16777216 May  6 14:06 000000010000000000000081
-rw-------. 1 cm800 cm800 16777216 May  6 14:07 000000020000000000000083
-rw-------. 1 cm800 cm800      242 May  6 14:07 000000020000000000000083.00000020.backup
-rw-------. 1 cm800 cm800 16777216 May  6 14:11 000000010000000000000082

答案1

使用-nt,-ot运算符来测试一个文件是否比另一个文件更新/更旧:

#! /bin/bash

# Find the newest backup file:
unset newest
for f in *.backup ; do
    [[ $newest ]] || newest=$f           # Initialize.
    [[ $f -nt $newest ]] && newest=$f    # Keep the newest so far.
done

# Delete all the older files:
for f in * ; do
    [[ $f -ot $newest ]] && rm "$f"
done

相关内容