2

把无法回头的rm命令改造成mv命令

 2 years ago
source link: https://shingle.me/post/%E6%8A%8A%E6%97%A0%E6%B3%95%E5%9B%9E%E5%A4%B4%E7%9A%84rm%E5%91%BD%E4%BB%A4%E6%94%B9%E9%80%A0%E6%88%90mv%E5%91%BD%E4%BB%A4/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

把无法回头的rm命令改造成mv命令

2017-11-11 15:09:18 约 697 字 预计阅读 2 分钟 96 次阅读

让rm -fr执行起来没那么可怕

这貌似是我用linux以来不下5次后悔用rm -fr删除不希望被删掉的文件了,其中甚至包括一次误操作删除了/etc导致服务器异常,只能还原到以前的备份。

虽然rm -fr删除的文件可以被找回,但是如果一次性删除的文件太多,需要还原太过复杂基本是不可能的。这个想法是我在搜索如何恢复rm -fr命令时无意间发现的。而且也很简单,原理就是利用alias别名把rm操作改成执行一个脚本,新建一个rm文件,然后chmod +x rm给予执行权限,如下:

#!/bin/bash
PARA_CNT=$#
TRASH_DIR="/home/shingle/.local/share/Trash/files"
 
for i in $*; do
    STAMP=`date -d today +"%Y-%m-%d-%T"`
    fileName=`basename $i`
    mv $i $TRASH_DIR/$fileName.$STAMP
done

因为mvrm在执行结果方面操作很像,利用脚本可以将需要删除的文件移动到回收站,回收站的位置在.local/share/Trash/files,这里我是为了让root用户也能使用这个脚本,所以写的完整路径。下一步就是修改~/.bashrc文件,在普通用户的文件.bashrc添加一行alias rm='~/bin/rm',对应填写脚本所在的位置。因为有时候我们需要切换到root用户进行某些更高级的操作,所以也需要修改root用户让别名生效,所以同样要在/root下的~/.bashrc添加别名,记得改成该脚本的绝对路径。

最后source ~/.bashrc让别名生效,试一下rm a看下效果

以上是我用在平时使用的电脑上的,如果用在服务器没有回收站这种东西,可以把脚本中的TRASH_DIR改成你想移动的位置,我用的是/tmp/rm

关于清理这些文件,这就很随意了,自己的电脑我觉得手动清理回收站即可,服务器上可以添加一个定时任务,删除不是很频繁可以选择一个月清理一次

0 0 1 * * rm -fr /tmp/rm/*

文章作者 shingle (如需转载请注明本文链接,违者必究)

上次更新 2017-11-11 15:09:18

许可协议 CC BY-NC-ND 4.0

赞赏支持 赞赏列表

Golang处理json动态key的几种情况 docker挂载数据卷的行为和解决docker数据卷丢失的问题


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK