21个稳定版本
3.3.2 | 2024年5月7日 |
---|---|
3.2.0 | 2024年3月29日 |
2.1.0 | 2023年9月28日 |
2.0.4 | 2023年5月1日 |
1.4.3 | 2020年10月1日 |
#133 在 文件系统
1,379 每月下载量
45KB
1K SLoC
垃圾处理程序
垃圾处理程序是一个小型命令行工具,旨在替换rm
。
它通过将待删除的项目移动到垃圾目录而不是立即删除它们来实现。由于移动单个项目几乎是瞬时的(即使是大型目录),而递归删除项目可能需要相当长的时间,因此垃圾处理程序比rm
更快,尤其是在大型目录中。
包括一个可选的模糊查找器,以交互方式恢复项目。
用法
有几种可用的操作
ls
:列出垃圾中的项目,使用-d / --details
获取项目的尺寸和内容rm <path>
:将项目移动到垃圾,使用-p / --permanently
删除项目而不是将其移动到垃圾unrm <name>
:在当前目录中恢复项目,使用--id
提供ID和--to
指定其他恢复位置unrm-ui
:交互式恢复项目(将显示模糊查找器)drop <name>
:永久地从垃圾中删除项目,使用--id
提供IDclear
:从垃圾中删除所有项目
它是如何工作的
当项目被移动到垃圾时,其名称将加上删除日期和一个通过双重CRC计算的ID(见技术细节)。
例如,删除名为my-files
的项目时,它将被移动到垃圾目录下,名称类似于
my-files [@ 2020.08.03_11h36m36s.093347700+0200] {IBuc}
这允许您打开垃圾目录并查看其内容,而无需使用垃圾处理程序二进制文件。此外,垃圾处理程序不使用索引文件,它仅从垃圾中存在的文件中提取信息,因此您可以将其移动到另一个驱动器而不会出现问题,甚至可以将两个垃圾目录合并成一个!
此重命名还允许删除具有相同名称的多个项目而不会发生冲突。
您可以指定名称来从回收站恢复项目。如果多个项目具有相同的名称,将显示具有提供名称的项目列表以及它们的ID,并要求您指定要恢复的项目ID。
外部文件系统
移动实际上是通过对文件重命名来完成的,这比移动数据要快得多,并且会产生完全相同的结果。对于外部文件系统,在文件系统的根目录中创建一个回收站目录。
技术细节
被删除的项目名称必须符合UTF-8规范,因此无效的UTF-8文件名会导致程序失败,除非在删除期间提供了 -a / --allow-invalid-utf8-item-names
标志,这将导致将文件名转换为有效的UTF-8字符串,可能会丢失一些信息。
回收站项目的名称由原始项目名称、删除日期和时间(以纳秒为单位,包括时区)以及一个ID组成,该ID是删除日期的24位CRC校验和。
CRC被选择是因为它非常快,并且使用24位CRC在不同日期之间发生冲突的风险极低(除非一个项目被删除数十万次,并且具有相同的名称)。
在删除项目时,如果多个回收站项目具有相同的名称,则需要 同时 指定ID和名称,因此不需要对文件名进行CRC校验,这样可以避免所有与文件名相关的冲突风险,而文件名可能具有数百万个不同的值。
依赖项
~12-22MB
~279K SLoC