0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

磁盤滿了除了刪文件還可以這樣

阿銘linux ? 來源:阿銘linux ? 作者:阿銘linux ? 2022-11-09 09:10 ? 次閱讀

【需求】

有一個目錄/data/att/,該目錄下有數百個子目錄,比如/data/att/aming,/data/att/linux.

然后再深入一層為以日期命名的目錄,例如 /data/att/aming/20220909,每天會生成一個日期新目錄。

由于/data所在磁盤快滿了,所以需要將老文件(一年以前的),挪到另外一個目錄下 /data1/att下。

示例:

mv   /data/att/aming/20211001  /data1/att/aming/20211001

挪完之后,還需要做軟鏈接,

示例:

ln -s /data1/att/aming/20211001  /data/att/aming/20211001 

需要寫一個腳本,要求/data/att/下所有子目錄都要按此操作,腳本會每天01:00 執(zhí)行一次,任務計劃無需考慮,只需要寫腳本即可。

提醒:要確保老文件成功挪到/data1/att下之后才能做軟鏈接,需要有日志。

【解析】

要求看起來雖然很多,但本質上就一個核心訴求,將老的文件挪到新的目錄,然后將挪走的目錄軟鏈接到之前的位置上。

先來分析目錄結構。

/data/att/下面有很多子目錄,每一個子目錄下面又有按日期命名的目錄。

而我們要挪走并做軟鏈接的目錄就是這個按日期命名的目錄。

首先,/data/att/下面有幾百個子目錄,所以這里需要做一個遍歷循環(huán)。

然后如何找到每一個子目錄下面一年以前的目錄呢?

先理一下思路:由于子目錄下面是按年月日命名的目錄,而且腳本需要每天都執(zhí)行,那是不是意味著,2022年9月1日要挪走并做軟鏈接的目錄是20210901呢?

原則上是這樣,但是我們要考慮到一個問題,這個腳本第一次執(zhí)行時一年以前的目錄可不止一個啊。那換一個方法,使用find吧。

而find時,只需要針對/data/att/xxx/下的這一層目錄,再往里的子目錄就不管了。

find有一個 -maxdepth選項,用來指定目錄層級,就可以實現(xiàn)這個目的。

總結一下,命令是這樣的

find  /data/att/xxx/ -maxdepth 1 -type d  -mtime +365

注意,這個-maxdepth 1必須要放到-type d的前面去。

好,找到目錄后,接下來就該mv走了。

問題又來了,假如在mv的時候,目標目錄已經存在了呢?

雖然這種情況幾乎不會發(fā)生,但也不排除有此類特例。

而且題目中也要求了,只有成功挪走了,才可以做軟鏈接,如果目標目錄已經存在,那mv的時候,會將目錄挪到目標目錄下面。

說到這,你可能已經懵了,還是舉個具體例子吧。

比如,我想將/root/2這個目錄挪到/tmp/下去,正常命令是這樣的:

mv   /root/2   /tmp/2  

但是,如果/tmp/2已經存在了,則會將/root/2 放到 /tmp/2/的里面,就變成了 /tmp/2/2

為了避免此類情況發(fā)生,我建議使用rsync來做同步,

rsync -a /root/2/   /tmp/2/

這樣,就可以保證/root/2/ 和 /tmp/2/ 是一樣的了。那你會說,使用rsync后,原來的目錄不還存在么?

是的,所以我們就需要額外做一個刪除操作,前提是,只有當rsync 執(zhí)行成功后,才能做刪除。刪除后,再來做軟鏈接的操作,軟鏈接的命令很簡單,不用多解釋了 。

最后還有一個要求,就是需要有日志輸出,比如是否挪動成功,是否做軟鏈接成功。這就需要使用 $?這個變量來驗證了。

這里還有一個知識點需要提醒各位看官。雖然我們find出來的目錄最多到日期那一層級,比如:/data/att/aming/20211001,但是 /data1/att/ 那邊可不一定有 aming這個子目錄啊,所以你要么提前先創(chuàng)建好aming這一層子目錄,要么在rsync的時候,讓它自動創(chuàng)建。

rsync有一個-R選項,可以做到這點,還是舉例子吧:

比如,我想將 /dir1/a/b同步到 /dir2/a/b ,但是/dir2/a目錄不存在,你可以這樣做

cd  /dir1
rsync -avR  a/b  /dir2/

這樣就會自動創(chuàng)建a/b兩層目錄,注意,我可是先cd到了/dir1下面,再去rsync -R

【參考答案】

腳本最終是這樣的:

#!/bin/bash
main()
{
cd  /data/att
for dir in `ls`
do 
    for dir2 in `find $dir -maxdepth 1 -type d -mtime +365`
    do
        rsync -aR $dir2/  /data1/att/ 
        if [ $? -eq 0 ]
        then
            rm -rf $dir2
            echo "/data/att/$dir2 移動成功"
            ln -s /data1/att/$dir2  /data/att/$dir2  && echo "/data/att/$dir2成功創(chuàng)建軟鏈接"
            echo 
        else
            echo "/data/att/$dir 未移動成功"
        fi      
    done
done
}
main &> /tmp/move_old_data_`date +%F`.log

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 磁盤
    +關注

    關注

    1

    文章

    355

    瀏覽量

    25094
  • Data
    +關注

    關注

    0

    文章

    61

    瀏覽量

    38157

原文標題:磁盤滿了除了刪文件還可以這樣

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    除了定時開關機,5G基站還可以這樣節(jié)省電費

    最近,一篇關于中國聯(lián)通在每天21:00到次日9:00關閉5G基站,以減少能耗,節(jié)約電費的新聞,引起了大量的關注。很多人是在看到這樣的報道后才知道,原來5G基站是需要耗費大量電能的。那除了關閉基站,還有什么辦法可以節(jié)省電費呢?
    的頭像 發(fā)表于 08-03 06:20 ?1.3w次閱讀

    求...

    本帖最后由 871881392 于 2014-11-28 08:21 編輯 求
    發(fā)表于 11-24 14:56

    燈光還可以這樣控制

    的智能燈光,可以實現(xiàn)遙控器在通電狀態(tài)下的自由分組,任性操作,再也不需反復斷電的復雜設置分組;未來的智能燈光,除了可以單一控制外還可以批量、大批量實時控制群組燈光的色溫亮弱、無限顏色色彩
    發(fā)表于 02-25 10:22

    嵌入式linux磁盤被寫滿了再寫會出現(xiàn)什么后果

    ),結果日志缺東少西,斷斷續(xù)續(xù);不騰挪磁盤,再次運行應用,依舊可以正常工作一段時間;==待解釋參見:linux的硬盤滿了會導致哪些系統(tǒng)調用受影響...
    發(fā)表于 11-05 07:03

    高精度的溫度控制除了用PID控制還可以用什么算法控制?

    高精度的溫度控制,我們除了用PID控制還可以用什么算法控制
    發(fā)表于 10-12 08:09

    電腦c盤滿了怎么清理

    打開我的電腦,在C盤上鼠標右鍵選擇“屬性”→“清理磁盤”,這樣可以先把C盤里的一些表面垃圾和零碎文件清理掉。在進入C盤的“C:\WINDOWS\SoftwareDistribution
    的頭像 發(fā)表于 03-08 16:16 ?16.2w次閱讀

    Linux系統(tǒng)不停的報磁盤已滿應該如何處理

    由于是開發(fā)環(huán)境,堆滿了大量的日志沒,10g了,于是我刪除了一些很久的日志,8g。奇怪的事情發(fā)生了,命令查看磁盤,依然是100%。linux還是跟windows區(qū)別挺大的么,windo
    的頭像 發(fā)表于 06-27 09:35 ?2759次閱讀

    安卓手機內存不夠 哪些可以放心

    安卓手機用的時間長了,如果不及時清理文件的話,再大的內存也不夠用。但文件名都是英文,到底哪些可以放心,哪些選錯必死呢?一文幫你解答! 這些放心
    的頭像 發(fā)表于 08-06 14:29 ?8268次閱讀

    MySQL磁盤滿了應該如何解決

    本文檔的主要內容詳細介紹的是MySQL磁盤滿了應該如何解決。
    發(fā)表于 12-26 10:25 ?2076次閱讀

    【服務器數據恢復】ESXi虛擬磁盤文件被誤刪除的數據恢復案例

    機房異常斷電導致服務器上某臺虛擬機無法正常啟動。管理員查看虛擬機配置文件,發(fā)現(xiàn)此虛擬機的配置文件除了磁盤文件外其他的配置
    的頭像 發(fā)表于 05-25 16:19 ?1506次閱讀
    【服務器數據恢復】ESXi虛擬<b class='flag-5'>磁盤</b><b class='flag-5'>文件</b>被誤刪除的數據恢復案例

    沒有做LVM的磁盤如何擴容呢

    今天一個學生問我,虛擬機磁盤滿了,然后用fdisk工具把原來的磁盤/dev/sda3改為lvm格式,結果不生效。
    的頭像 發(fā)表于 05-26 11:20 ?1667次閱讀
    沒有做LVM的<b class='flag-5'>磁盤</b>如何擴容呢

    linux磁盤空間滿了怎么清理

    和告警信息一致,接著我們就是要找到導致磁盤空間滿的目錄或文件 如何找到占用空間大的目錄或文件? 一種比較笨的方法是,在根目錄下,通過du -hs命令,列出各目錄所占空間大小。
    的頭像 發(fā)表于 11-09 11:46 ?973次閱讀
    linux<b class='flag-5'>磁盤</b>空間<b class='flag-5'>滿了</b>怎么清理

    萬萬沒想到,二極管竟然還可以這樣用?

    萬萬沒想到,二極管竟然還可以這樣用?
    的頭像 發(fā)表于 12-15 09:28 ?248次閱讀
    萬萬沒想到,二極管竟然<b class='flag-5'>還可以</b><b class='flag-5'>這樣</b>用?

    linux傳輸一半磁盤滿了怎么清理

    常用的方法和工具,幫助您解決磁盤空間不足的問題。 第一部分:確認磁盤使用情況(200字) 在解決磁盤空間不足之前,首先需要確認系統(tǒng)中各個文件夾的使用情況。
    的頭像 發(fā)表于 11-23 10:34 ?450次閱讀

    服務器數據恢復—KVM虛擬機raw格式磁盤文件數據恢復案例

    : 工作人員操作失誤刪除了服務器上的3臺KVM虛擬機,虛擬機中運行數據庫,需恢復誤刪除虛擬機中raw格式的磁盤文件
    的頭像 發(fā)表于 05-17 13:33 ?312次閱讀
    服務器數據恢復—KVM虛擬機raw格式<b class='flag-5'>磁盤</b><b class='flag-5'>文件</b>數據恢復案例