我正在开发一个旧的 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 天的所有内容,避免垃圾目录本身。在所有内容都消失之前,目录不会被删除。