編程學習網 > 服務器 > Linux > 如何把linux用的出神入化,以rm刪除文件為案例
2021
05-08

如何把linux用的出神入化,以rm刪除文件為案例

不知道大家對在服務器上使用rm命令有什么感覺,反正每次我使用的時候,都會好好確認,即使這樣,按下回車的時候,心里還是會有點慌慌的感覺。

因為和windows系統不一樣,使用win系統默認刪除文件,該文件就會被放入到回收站中,想要恢復直接從回收站找到文件并恢復即可。

但是在linux中,用rm刪除文件,那就是真的刪除掉了,是沒有回收站這個概念的。

正因為rm命令的危險性,所以想要不自己寫一個shell腳本,用來刪除文件。

自己定義的這個命令刪除文件時,會將原文件的位置移動“回收站”目錄,然后再將原文件給刪除掉。如果誤刪了,就可以從回收站中找到該文件并恢復。

首先,第一步,我們需要先創建回收站目錄,如果已經有了此目錄從不用重新創建

# 回收站目錄
DEL_BAK_DIR="/root/.delbak"

if [ ! -d "$DEL_BAK_DIR" ];then
    mkdir "$DEL_BAK_DIR" || exit 1
fi

然后我們來獲取用戶輸入的參數,循環遍歷有所參數,調用刪除函數來刪除。當然,我們首先需要檢查用戶是否輸入了參數,如果用戶沒有輸入參數那么就直接退出程序,不往下走了。


# 獲取參數
if (( $# < 1 ));then
    echo "Usage ${0} file1 file2 ..."
    exit 2
fi

# 刪除文件
for file in $*
do
    delete $file
done

最后,我們需要編寫delete這個函數了。這個函數應該有哪些功能呢?首先,它肯定能對待刪除的文件名做檢查,如果不是文件或目錄,它就不繼續往下走了。另外,每次將刪除文件放到回收站目錄前,應該對回收站目錄所在分區剩余空間做檢查,如果空間不足也不往下走。

下面是文件是否存在的檢查

if [ ! -e $1 ];then
    echo "file $1 is not exists"
    exit 3
fi
而關于分區空間的檢查則稍微復雜些。首先,我們要獲取到回收站目錄所在分區剩余空間,然后獲取到待刪除文件的大小,拿這兩個數據做對比。
# 分區剩余空間是否充足校驗
part_free=$(df -k $DEL_BAK_DIR | grep -iv filesystem | awk '{print $4}')
file_size=$(du -ks $1 | awk '{print $1}')   
 
if (( part_free > file_size))
then
    # 備份且刪除源文件
    ……
else
    echo "The disk size is not enough"
    exit 4
fi
到這步,所有的準備工作都做好了,就差最后的備份源文件,然后刪除源文件了。下面給出完整的代碼:
#!/bin/bash
# 使用自定義命令del來代替rm命令

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin
export LANG=en

# 回收站目錄
DEL_BAK_DIR="/root/.delbak"

function delete ()
{
    # 文件名是否存在校驗
    if [ ! -e $1 ];then
        echo "file $1 is not exists"
        exit 3
    fi
    
    # 分區剩余空間是否充足校驗
    part_free=$(df -k $DEL_BAK_DIR | grep -iv filesystem | awk '{print $4}')
    file_size=$(du -ks $1 | awk '{print $1}')    
    
    if (( part_free > file_size))
    then
        # 備份且刪除源文件
        now=$(date +%Y%m%d%H%M)
        if [ ! -d "$DEL_BAK_DIR/.$now" ];then
            mkdir "$DEL_BAK_DIR/.$now" || exit 5
        fi
        
        mv -f $1 $DEL_BAK_DIR/.$now/$(basename $1)
    else
        echo "The disk size is not enough"
        exit 4
    fi
}

if [ ! -d "$DEL_BAK_DIR" ];then
    mkdir "$DEL_BAK_DIR" || exit 1
fi  # 獲取參數
if (( $# < 1 ));then
    echo "Usage ${0} file1 file2 ..."
    exit 2
fi

# 刪除文件
for file in $*
do
    delete $file
done
關于該腳本本人已經測試過,大家可以拿去放心用。該腳本支持通配符哦,比如想刪除所有以.html結尾的文件,只需輸入del *.html即可。


以上就是關于這次的分享,是不是感覺打開了新世界呢?獲取更多資訊和教程歡迎關注編程學習網




聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取