Chinaunix

标题: 请教这个shell 脚本咋写 [打印本页]

作者: kakaliu    时间: 2014-11-06 14:09
标题: 请教这个shell 脚本咋写
本帖最后由 kakaliu 于 2014-11-06 14:16 编辑
  1. #!/bin/bash

  2. listfile=`ls  *.sql.gz | awk -F"_" '{print $1}'`
  3. #bakdate=`ls | awk -F"_" '{print $3}'`
  4. yesterday=`date -d '-1 days' +%Y%m%d`

  5. localdir="/home/Administrator/test"

  6. for i in $listfile
  7. do
  8. mkdir -p $i/$yesterday
  9. done
复制代码
我现在localdir目录有如下文件 是从远处FTP下载下来的
文件名如下
gold_20141105.sql.gz  
hp_20141105.sql.gz等等文件


现在要求把以.sql.gz结尾的文件 转移到对应的目录下

/home/Administrator/test/gold/20141105/gold_20141105.sql.gz  
/home/Administrator/test/hp/20141105/hp_20141105.sql.gz







作者: Linux_manne    时间: 2014-11-06 14:18
类似这样的
  1. for i  in `ls *.sql.gz`
  2. do
  3.       dirs=${i%%_*}
  4.       tmps=${i##*_}
  5.       dates=${tmps%%.*}
  6.       cp $i $localdir/${dirs}/${dates}/$i

  7. done
复制代码
没测试过
作者: qq58945591    时间: 2014-11-06 14:49
Linux_manne 发表于 2014-11-06 14:18
类似这样的没测试过



再加点判断,目标目录不存在则先创建,不然cp就失败了。
作者: 银风冷月    时间: 2014-11-06 15:01
  1. remote_dir=/home/Administrator/test/
  2. for i in `ls localdir`;do
  3.     newdir=${remote_dir}$(echo $i|sed -r 's/([^_]+)_([^.]+).sql.gz/\1\/\2/')
  4.     if [ -d $newdir ];then
  5.         mv $i $newdir
  6.     else
  7.         mkdir -p $newdir
  8.         mv $i $newdir
  9.     fi
  10. done
复制代码

作者: 银风冷月    时间: 2014-11-06 15:02
  1. #!/usr/bin/env python2.7
  2. #-*- coding:utf8 -*-

  3. import os,re

  4. sep = os.sep
  5. local_dir = '/opt/localdir'
  6. remote_dir = '/home/Administrator/test'
  7. files = os.listdir(local_dir)
  8. filecount = len(files)

  9. for i in xrange(filecount):
  10.     if 'sql.gz' in files[i]:
  11.         dir1 = re.search('([^_]+)_([^.]+).sql.gz',files[i]).group(1)
  12.         dir2 = re.search('([^_]+)_([^.]+).sql.gz',files[i]).group(2)
  13.         if not os.path.isdir('%s%s%s%s%s'%(remote_dir,sep,dir1,sep,dir2)):
  14.             os.makedirs('%s%s%s%s%s'%(remote_dir,sep,dir1,sep,dir2))
  15.             os.popen('mv %s %s%s%s%s%s'%(files[i],remote_dir,sep,dir1,sep,dir2)).read()
  16.         else:
  17.             os.popen('mv %s %s%s%s%s%s'%(files[i],remote_dir,sep,dir1,sep,dir2)).read()
  18.             
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2