不使用函数创建回收站功能

不使用函数创建回收站功能

我正在开发一个旧的 Linux 学习项目,其中一项任务概述如下:

“创建一个别名,以保护文件不被永久删除,将它们移动到名为 .Trash 的目录。为 crontab 创建一个命令,定期删除 .Trash 中超过 30 天的内容(即使它们是目录)。”

我预计将使用别名 cli 命令来执行此操作。我不允许使用函数或编写接受输入的小脚本。

首先,这可能吗?我认为是的,因为它在书中。其次,从哪里开始呢?其中一些是显而易见的,我已经创建了 .Trash 目录,并且可以理解使用别名而不是 rm 的概念,但是可以在别名中放置哪些 cli 操作来执行此操作?

Alias trash=mv xxx .trash xxx

上述内容需要用户输入或变量信息。我在这里没有看到什么?

答案1

由于它是 Linux 的东西,我假设 GNUmv是可用的。它有一个-t选项,允许在应移动的路径名之前指定目标目录。

所以,简单的事情:

alias trash='mkdir -p "$HOME/.trash" && mv -b -t "$HOME/.trash"'

这将创建一个名为 的别名trash,您可以使用它来代替rm(但它并不真正接受 的任何选项rm)。当你使用

trash thisfile thatdir

实际执行的是

mkdir -p "$HOME/.trash" && mv -b -t "$HOME/.trash" thisfile thatdir

如果垃圾目录尚不存在(或者碰巧已被删除),则此别名还会在主目录中创建垃圾目录。它还使用mv -b(另一个mv仅适用于 GNU 的标志)在垃圾文件夹中创建备份,以防其中已存在同名文件。

一个清理这个垃圾目录中旧东西的 cron 作业会执行类似的事情

find "$HOME/.trash" -mindepth 1 -ctime +30 -delete 2>/dev/null

这将删除超过 30 天的所有内容,避免垃圾目录本身。在所有内容都消失之前,目录不会被删除。

相关内容