我正在处理一个旧的 linux 学习项目,其中一项任务概述如下:
“创建一个别名,保护文件不被永久删除,我将它们移动到一个名为 .Trash 的目录。为 crontab 创建一个命令,该命令将定期删除 .Trash 中超过 30 天的内容(即使它们是目录)。”
我应该使用别名 cli 命令来做到这一点。我不允许使用函数或编写接受输入的小脚本。
首先,这可能吗?我假设是的,因为它在书中。其次,从哪里开始呢?其中一些很明显,我已经创建了 .Trash 目录并且可以理解使用别名而不是 rm 的概念,但是可以在别名中放置哪些 cli 操作来执行此操作?
Alias trash=mv xxx .trash xxx
Run Code Online (Sandbox Code Playgroud)
以上将需要用户输入或变量信息。我在这里看不到什么?
因为它是 Linux 的东西,所以我假设 GNUmv
是可用的。它有一个-t
选项,允许在应该移动的路径名之前指定目标目录。
所以,简单的事情:
alias trash='mkdir -p "$HOME/.trash" && mv -b -t "$HOME/.trash"'
Run Code Online (Sandbox Code Playgroud)
这将创建一个别名trash
,您将使用它来代替rm
(但它并不真正接受 的任何选项rm
)。当你使用
trash thisfile thatdir
Run Code Online (Sandbox Code Playgroud)
实际执行的是
mkdir -p "$HOME/.trash" && mv -b -t "$HOME/.trash" thisfile thatdir
Run Code Online (Sandbox Code Playgroud)
如果垃圾目录尚不存在(或碰巧已被删除),则此别名还会在主目录中创建垃圾目录。它还使用mv -b
(另一个mv
仅限GNU 的标志)在垃圾文件夹中创建备份,以防其中已存在同名文件。
清除旧事物的垃圾目录的 cron 作业将执行类似
find "$HOME/.trash" -mindepth 1 -ctime +30 -delete 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
这将删除超过 30 天的任何内容,避免垃圾目录本身。在目录的所有内容都消失之前,目录不会被删除。