作者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/cn.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