作者sanbis (方正)
看板Linux
標題[問題] 時間增減的計算
時間Mon Nov 16 10:31:36 2020
目前在寫一個備份用得程式
希望可以把要備份保留的數量做成變數來指定
像下面~設定保留 7 天
將 7 天前的檔案做刪除
del_num=7
stamp=`date +%Y%m%d_%H%M` #時間標記 , format 20110107_1256
stamp_del=`date -d' -${del_num} day' +%Y%m%d_%H%M` #要刪除的時間
echo "Time(stamp): ${stamp}"
echo "DEL(stamp_del): ${stamp_del}"
但是執行的結果如下
在刪除日期的檔名沒被抓到
感覺上是變數沒被抓進去
[root@linux10 ~]# sh test2.sh
date: invalid date ‘ -${del_num} day’
Time(stamp): 20201116_1026
DEL(stamp_del):
[root@linux10 ~]#
不知道有沒有哪位可以指點一下這個寫法是哪裡有問題?
--
『老闆你好 我是國立的』
『老闆你好 我是私立的』 『腦~~~~~~~闆~~~~~~』 Amy!
◢ ◣有消息會跟你聯絡 ◢ ◣有消息會跟你聯絡 ◢ ◣給她個私人秘書職位
◤ ◥ ◥ ◢ ◤◥ ◥ ◢ ◥◢ ◣ 國立
-○=○- ◤ -□=□- ◤ ◥● ●● ◤ ◥ 私立
◥ ◤ ︶ ◥ ◤ ︶ ● ▼◤ ● ) 尬不過
◢ ◥◣╱
◥ -? ◢ ◣◣╱
◥ - ◢ )●) ▼ ◤ 兩粒
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.125.62.244 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Linux/M.1605493899.A.E62.html
1F:推 ckc1ark: 單引號改用雙引號 11/16 10:42
照你說的單引號改雙引號還是不行~
del_num=7
stamp=`date +%Y%m%d_%H%M` #時間標記 , format 20110107_1256
stamp_del=`date -d" -${del_num} day" +%Y%m%d_%H%M` #要刪除的時間
echo "Time(stamp): ${stamp}"
echo "DEL(stamp_del): ${stamp_del}"
輸出結果
test2.sh: line 3: -${{del_num}} day: bad substitution
Time(stamp): 20201116_1137
DEL(stamp_del):
※ 編輯: sanbis (59.125.62.244 臺灣), 11/16/2020 11:38:43
2F:推 bitlife: day前面空百拿掉 11/16 11:41
3F:推 ucrxzero: -要拿掉 -在變數裡面有特別意義 11/16 13:13
4F:→ ucrxzero: 還是+忘了 11/16 13:14
5F:→ ucrxzero: 反正改了就應該好了 11/16 13:14
6F:→ ucrxzero: 我記得是dash在變數是若空則q的意義 11/16 13:16
7F:→ ucrxzero: escape 掉那個dash用返斜線試試看 我懶得試了但應該是 11/16 13:16
8F:→ ucrxzero: 這原因 11/16 13:16
9F:推 ucrxzero: 我輸出你修改後的可以欸 11/16 13:18
10F:→ ucrxzero: 我看是不是sh dash bash版本的關係 11/16 13:19
11F:推 ucrxzero: 第一行加個#!/bin/bash試試看 11/16 13:23
12F:推 ucrxzero: #!/bin/sh #!/bin/dash 都試試看 11/16 13:39
13F:→ ucrxzero: 先不要動- 11/16 13:39
14F:→ a58524andy: 個人script寫完都會先shellcheck 因為實在是不太熟XD 11/16 17:11
15F:→ ucrxzero: 等樓主看看怎麼說 11/16 17:27
最後是這個樣子~
#!/bin/sh
#!/bin/dash
del_num=7
stamp=`date +%Y%m%d_%H%M` #時間標記 , format 20110107_1256
stamp_del=`date -d" -${del_num}day" +%Y%m%d_%H%M` #要刪除的時間
echo "Time(stamp): ${stamp}"
echo "DEL(stamp_del): ${stamp_del}"
輸出結果為
Time(stamp): 20201116_1744
DEL(stamp_del): 20201109_1744
-${del_num}day
這個 - 不能拿掉~
不然就變成往後算七天了~
感激上面的幾位提供的意見~m(_ _)m
※ 編輯: sanbis (59.125.62.244 臺灣), 11/16/2020 17:47:42
16F:推 ucrxzero: 一個就好 不要兩個 11/16 18:00
17F:→ ucrxzero: 可以兩個嗎== 11/16 18:00
18F:推 ucrxzero: 是請你個別試試看那三個 11/16 18:02
明天再來各別測試~
19F:→ newversion: 刪除7天前資料, 用 find -mtime -delete 最簡單 11/17 17:24
原本的計畫是在遠端主機上執行備份並用 FTP 上傳~
結果測試以後…………
遠端主機權限沒有提供 FTP 傳輸檔案~
要改用 PHP 去寫這個傳輸檔案的功能~
整個備份架構重新更改中~
(眼神死~Orz
※ 編輯: sanbis (61.224.154.49 臺灣), 11/18/2020 01:56:27
20F:→ bitlife: 說不定是提供sftp? 畢竟ftp和telnet一樣都是以前明碼傳輸 11/18 06:31
21F:→ bitlife: 時代的產物,不提供很正常 11/18 06:31
有提供 FTP 上傳/下載檔案功能
只是你用 script 直接執行就不支援
至於 sftp 。。。。
遠端主機連 SSH 都沒有~怎麼可能會有 sftp
※ 編輯: sanbis (59.125.62.244 臺灣), 11/18/2020 15:41:40
剛剛重新測試~
#!/bin/sh
#!/bin/dash
這個不是必要的
只要把
' -${del_num} day' 改為雙引號就可以了
(之前說失敗可能是眼睛脫窗沒看清楚?)
del_num=7
stamp=`date +%Y%m%d_%H%M` #時間標記 , format 20110107_1256
stamp_del=`date -d" -${del_num} day" +%Y%m%d_%H%M` #要刪除的時間
echo "Time(stamp): ${stamp}"
echo "DEL(stamp_del): ${stamp_del}"
※ 編輯: sanbis (59.125.62.244 臺灣), 11/18/2020 15:47:22