免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3320 | 回复: 10
打印 上一主题 下一主题

如何查找并还原最新的备份文件??[已解决] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-18 14:22 |只看该作者 |倒序浏览
xx目录下有A、B、C3个文件,为备份时生成,带有日期戳,即A.090218、B.090218、C.090218。
随着时间推移,可能会有不同日期戳的文件,比如:A.090218、A.090217、A.090216;B.090218、B.090217、B.090216;C.090218、C.090217、C.090216。

现需要将它们中最新的一批文件(A、B、C)选出并打印到屏幕,然后cp到原来的目录,去掉末尾的日期戳(.%y%m%d):
A文件到aa目录、B文件到bb目录、C文件到cc目录,请问如何实现?

请给个思路。谢谢。

[ 本帖最后由 guorui913 于 2009-2-19 13:55 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-18 14:37 |只看该作者
原帖由 guorui913 于 2009-2-18 14:22 发表
xx目录下有A、B、C3个文件,为备份时生成,带有日期戳,即A.090218、B.090218、C.090218。
随着时间推移,可能会有不同日期戳的文件,比如:A.090218、A.090217、A.090216;B.090218、B.090217、B.090216;C.0 ...



FILE="A B C"

for i in $FILE
do
DIR=$(echo $i$i |tr 'A-Z' 'a-z')
cp $(ls -t ${i}* |head -1) /${DIR}/$i
done

[ 本帖最后由 Nikolai 于 2009-2-18 14:46 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-02-18 14:42 |只看该作者
原帖由 Nikolai 于 2009-2-18 14:37 发表

FILE="A B C"

for i in $FILE
do
mv $(ls -t $i |head -1) $i
done


真正的文件名并非A、B、C,而是带有日期后缀的,
这个方法的话是不是要改成:
DATE=$(date +%y%m%d)
FILE='A\$DATE B\$DATE C\$DATE’
??

论坛徽章:
0
4 [报告]
发表于 2009-02-18 14:45 |只看该作者
原帖由 guorui913 于 2009-2-18 14:42 发表


真正的文件名并非A、B、C,而是带有日期后缀的,
这个方法的话是不是要改成:
DATE=$(date +%y%m%d)
FILE='A\$DATE B\$DATE C\$DATE’
??



你不是要最新的吗?
我更新了一些. 你看看, 文件名是什么你就套进去咯. 和日期没关, ls -t ${i}*|head -1就已经把最新那个列出来了.

论坛徽章:
0
5 [报告]
发表于 2009-02-18 14:47 |只看该作者
原帖由 Nikolai 于 2009-2-18 14:37 发表

DIR=$(echo $i$i |tr 'A-Z' 'a-z')


sorry,刚才没说清楚,aa、bb、cc这3个目录是已经存在的目录,并非需要生成的,aa也没有具体含义,理解成“dir1、dir2、dir3”也可以。

修改后的应该可以,谢谢!

[ 本帖最后由 guorui913 于 2009-2-18 14:54 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-02-18 20:43 |只看该作者

回复 #1 guorui913 的帖子

xx目录下运行,时间戳前的文件名及对应的目录(绝对路径)修改file1 file2 file3变量值
  1. #!/bin/ksh
  2. file1="/tmp/1:a"
  3. file2="/tmp/2:b"
  4. file3="/tmp/3:c"
  5. for i in $file1 $file2 $file3
  6. do
  7.   name=`echo $i | awk -F ":" '{print $2}'`
  8.   dir=`echo $i | awk -F ":" '{print $1}'`
  9.   ls -t1 $name* | awk 'NR==1'
  10.   for file in `ls -t1 $name* | awk 'NR==1'`
  11.   do
  12.     \cp -f $file $dir/$name
  13.   done
  14. done
复制代码

论坛徽章:
0
7 [报告]
发表于 2009-02-19 10:44 |只看该作者

回复 #6 ywlscpl 的帖子

兄弟的方法不错,有更简便的办法么?

我的想法是找出XX目录下最新的3个文件(因为A、B、C3个文件几乎是同时备份的),然后去掉最后的".%y%m%d",然后根据名称分别CP到不同的目录即可。这样做复杂么?

论坛徽章:
0
8 [报告]
发表于 2009-02-19 11:05 |只看该作者

回复 #7 guorui913 的帖子

每次敲一串命令复杂还是敲一个命令复杂?

论坛徽章:
0
9 [报告]
发表于 2009-02-19 12:10 |只看该作者
原帖由 ywlscpl 于 2009-2-19 11:05 发表
每次敲一串命令复杂还是敲一个命令复杂?


我的意思也是做成脚本,不过我刚才的说的就是不用再去取路径了,其实都一样,再次感谢!

论坛徽章:
0
10 [报告]
发表于 2009-02-19 13:03 |只看该作者

回复 #6 ywlscpl 的帖子

在shell中执行的时候告诉我文件没有找到,但是直接执行
ls -t1 $name* | awk 'NR==1'
这段没有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP