Ubuntu 判斷檔案是否被修改並執行備份

2021-08-19 21:17:55 字數 2714 閱讀 3614

需求是在關機的時候對ubuntu系統上的某些重要檔案作備份,ubuntu系統是虛擬機器,備份到雲端的共享資料夾下。由於系統可能要頻繁的進行開關機,或者在開機的過程不一定會去變更要備份的檔案,所以希望能夠實現乙個邏輯能夠在備份之前先檢查一下,如果目標資料夾在本次開機過程中被修改了,就執行備份,如果沒有就不執行備份。

基於這樣的需求,我的思路是在指令碼中分別獲取系統的開機時間和要備份的目標檔案的最後修改時間,然後進行比對,如果目標檔案的最後修改時間大於系統啟動時間,那麼就執行備份,否則就不備份。

那麼首先我們來嘗試獲取系統啟動時間,可以"who -b"命令:

root@server:/# who -b

system boot 2018-05-11 09:55

接下來我們嘗試獲取要備份檔案的最後修改時間,假如我們要備份跟目錄下的tmp資料夾,所以需要先獲取tmp資料夾的時間。我們可以使用"ls -l | grep tmp"命令獲取tmp資料夾的詳細資訊,可以看到上次更改的時間是5月11號的12點17分。

root@server:/# ls -l | grep tmp

drwxrwxrwt 9 root root 4096 may 11 12:17 tmp

上面的時間格式是"may 11",這顯然是沒有辦法比較的,所以我們需要他輸出類似"2000-01-01"的格式,那麼如何改變輸入時間資訊的說格式呢?我們不妨先來嘗試一下date命令,輸入"date":

root@server:/# date

fri may 11 12:27:44 cst 2018

可以看到輸出了當前時間,而時間格式也是用英文的格式輸出的。不妨使用"--help"引數來檢視以下詳細資訊,我們可以得到改變日期輸出格式的資料,重新輸入"date "+%y-%m-%d %h:%m" "命令:

root@server:/# date "+%y-%m-%d %h:%m"

2018-05-11 12:05

可以看到日期的輸出格式改變了,那麼同樣,我們可以在"ls"命令裡面使用time-style引數,來指定檔案修改時間的輸出格式,下面我們重新輸入"ls -l --time-style="+%y-%m-%d %h:%m" | grep tmp"命令:

root@server:/# ls -l --time-style="+%y-%m-%d %h:%m" | grep tmp

drwxrwxrwt 9 root root 4096 2018-05-11 12:05 tmp

可以看到我們把時間都變成了我們想要的格式。

但是上面一行的輸出中,我們所需要的資訊其實只有時間而已,那麼我們怎樣才能將上面的時間提取出來呢?可以採用shell的分割字串的命令"string:a;b"(a,b是具體的阿拉伯數字),表示從第a+1個字元開始擷取,一共擷取b個字元。比如我們可以寫個測試指令碼,利用"vi sample"命令開啟編輯器,然後輸入:

#!/bin/bash

samp="123456789 2000-01-01 00:00"

echo $

可以看到我們宣告了乙個samp字串變數,他的前10位是數字,後面是日期格式,那麼我們要從他的第11位開始擷取,擷取後面的16位。所以用"$",那麼我們現在更改一下他的 執行許可權:

root@server:/# chmod +x sample
然後執行以下指令碼,可以看到輸出了後面的日期格式:

root@server:/# ./sample

2000-01-01 00:00

那麼現在還有最後乙個問題,這樣格式的時間是沒有辦法比較的,所以我們還要把時間格式轉化成可以進行數學比較的形式,可以使用"date -d"命令,將時間轉化為從從2023年1月1日零點以後到現在的總秒數,這樣就可以進行比較了,比如我們輸入"date -d "2000-01-01 00:00" +%s"命令:

root@server:/# date -d "2000-01-01 00:00" +%s

946656000

這就表示2023年1月1日零點到2023年1月1日零點經過了946656000秒,如此一來時間就是可以使用算數比較的了。

#!/bin/bash

backup_cloud="/mnt/hgfs/cloud/"

backup_dir="tmp"

backup_name="tmp-backup.tgz"

boot_info=`who -b`

boot_time=$

boot_second=`date -d "$" +%s`

file_info=`ls -l --time-style="+%y-%m-%d %h:%m" | grep $`

file_time=$

file_second=`date -d "$" +%s`

if [ $ > $ ]; then

cd /

tar -zcvf $$ $

fi

這樣就可以把根目錄下的tmp資料夾壓縮在/mnt/hgfs/cloud/tmp-backup.tgz裡面了,這裡的/mnt/hgfs/cloud是已經掛載的ubuntu和雲的共享資料夾。

關於如何在系統關機時進行備份,可以檢視另一篇文章《ubuntu新增開機/關機執行指令碼與service的理解》。

判斷檔案是否被開啟

判斷檔案是否被開啟 方法一 通過try catch對檔案的移動操作,如果檔案開啟,將不能移動,會進入catch段 通過返回bool值來反應是否能正常移動 private void button2 click object sender,eventargs e private static bool ...

C 判斷檔案是否被混淆

可以使用混淆工具對乙個dll 和 exe 進行混淆。但是如何知道乙個檔案是否已經混淆了。在發布之前,需要知道是不是有檔案忘了混淆。要判斷檔案是否混淆,必須知道常用的混淆手法。混淆就是因為編寫的 c 轉換 il 可以很容易被反編譯,從而知道了源 不利於保護軟體,不利於防止破解。所以可以通過混淆來讓反編...

C 判斷檔案是否被開啟占用

using system.io using system.runtime.interopservices dllimport kernel32.dll public static extern intptr lopen string lppathname,int ireadwrite dllimpo...