shellscript tar問題 - Linux

Suhail Hany avatar
By Suhail Hany
at 2021-08-05T21:35

Table of Contents

不好意思我又來了...
這幾天遇到一些問題想破頭只想出一點東西 決定還是來跟各位求助..
因為剛學script 是超級菜雞 寫得很雜亂請大家見諒

#!/bin/bash

last_month=$(date -d "$(date +%Y%m)01 last month" +%Y%m)
Source=/home/ray/photo
dest=/home/ray/photo2
sourcefilesize=$(ls -l /home/ray/photo/$last_month* | awk '{ SUM += $5} END {
print SUM}')
#destfilesize=$(ls -l /home/ray/photo3/$last_month* | awk '{ SUM += $5} END {
print SUM}')
today=$(date +"%Y-%m-%d")
zipname=$TODAY.tar.gz
zipfilename=${last_month:2}
verifydest=/home/ray/photo3



cd /home/ray/photo

file=$(ls -d $last_month*)

tar -zcvPf /home/ray/photo2/$zipfilename.tar.gz $file

tar -zxvf /home/ray/photo2/$zipfilename.tar.gz -C /home/ray/photo3

destfilesize=$(ls -l /NAS/Raytest3/$last_month* | awk '{ SUM += $5} END {
print SUM}')

if [ $sourcefilesize == $destfilesize ];
then
rm -rf $Source/$file
else
exit
fi

if [ $sourcefilesize == $destfilesize ];
then
rm -rf $verifydest/$file
else
exit
fi



流程是這樣的

首先每個月1號將/home/ray/photo 上個月份的所有資料打包放到/home/ray/photo2 並命
名為2107.tar.gz(8月1號執行)

再將2107.tar.gz解包將資料放到/home/ray/photo3

然後比對/home/ray/photo 跟 /home/ray/photo3兩邊檔案大小(驗證是否正常) 如果OK就
把他們的資料刪掉



目前我測試時有準備兩個自建的資料夾20210701 & 20210702 放到/home/ray/photo

將20210701 & 20210702 打包命名2107.tar.gz 放到/home/ray/photo2

再將/home/ray/photo2的2107.tar.gz解包放到/home/ray/photo3

比對/home/ray/photo跟/home/ray/photo3 的20210701 & 20210702檔案大小是否一樣

確定一樣並刪除/home/ray/photo的 20210701 & 20210702

但是/home/ray/photo3的20210701 & 20210702 只有刪掉2021072

刪除/home/ray/photo3的時候只刪掉20210702而20210702還在沒有刪掉

不知道問題在哪裡...



--
Tags: Linux

All Comments

Victoria avatar
By Victoria
at 2021-08-10T08:46
備份的話,不考慮rsync?
Robert avatar
By Robert
at 2021-08-14T19:58
比對檔案的話,diff或md5也許比較好?
Callum avatar
By Callum
at 2021-08-19T07:09
tar可以直接pipe跨檔案系統/目錄,不需要暫存檔
Regina avatar
By Regina
at 2021-08-23T18:20
感謝O大建議 我很需要XD
Bethany avatar
By Bethany
at 2021-08-28T05:31
rm -rf $verifydest/$file 會變成 rm -rf 3/file1
file2 第二個檔案沒有 3/ 路徑. 你可以 cd 先 cd 再
rm
Hedy avatar
By Hedy
at 2021-09-01T16:43
建議先裝個 shellcheck 把語法修一修
看到 rm -rf 後面的變數沒 quoting 實在是冒冷汗
Kyle avatar
By Kyle
at 2021-09-06T03:54
感謝兩位 !!
Olivia avatar
By Olivia
at 2021-09-10T15:05
你的 $today 是大寫還是小寫?
Rosalind avatar
By Rosalind
at 2021-09-15T02:16
today這個變數其實沒用到XD

直立外接螢幕待機後無法重開

Joseph avatar
By Joseph
at 2021-08-05T14:27
Lenovo T530 筆電,作業系統是 Ubuntu 20.04.2 LTS, 顯示卡 Nvidia NVS 5400M,用Mini DP外接了2560x1440的螢幕。 外接螢幕設橫向的時候一切正常,但是設定成轉90度直立的時候,一旦待機關閉螢幕, 就無法再正常顯示,不管是登入畫面還是登入後的畫面都不會 ...

makefile for loop 問題

Megan avatar
By Megan
at 2021-08-04T16:25
想請教一下,如果有這樣一個text file, Text.txt: a1 b1 c1 a2 b2 c2 ... a100 b100 c100 要怎麼樣在makefile的 for loop 當中用三個變數分別代表 a1~a100 b1~b100 c1~c100呢? 用 for i in $$(cat ...

想實現在外面連回家中的Linux主機

Zanna avatar
By Zanna
at 2021-08-03T01:42
目前設定到可以連同一個wifi,可以操作ssh來存取Linux電腦上的檔案 現在想要實現的是 能夠在外面(如連咖啡廳的wifi)也可以連回家中的Linux主機來進行存取, 目前想到的方法是利用teamviewer,這也是我一直操控實驗室電腦的方法 但我只想在terminal存取Linux上的檔案,不需 ...

shellscript tar問題

Isla avatar
By Isla
at 2021-07-31T10:55
請改用xargs find /home/ray/photo -type d -name and#34;202107*and#34; |xargs tar -czvPf /home/ray/photo2 /202107.tar.gz 你用exec的話,他是每找到一筆就會做一次tar的動作,這會把之前的壓縮覆檔 ...

shellscript tar問題

Susan avatar
By Susan
at 2021-07-31T07:54
最近公司丟一個寫Script的工作給我這個完全沒碰過的人.... 是這樣的... 我在/home/ray/photo路徑下放了3個資料夾,分別是20210811、20210701跟20210715 而我想要把20210701跟20210715兩個資料夾打包放到/home/ray/photo2並命名為20210 ...