免费注册 查看新帖 |

Chinaunix

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

[文件目录] UNIX shell 如何根据多个文件的文件名批量创建文件夹 并将文件复制到相应的文件夹下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-27 14:42 |只看该作者 |倒序浏览

如图 有几百条这种文件
先根据中间的“-20140521-”中的‘20140521’创建一个文件夹,再根据文件名的开始8位“20140521”创建一个子文件夹,然后把文件复制到相应的文件夹中。
“-20140521-”指的是日期,文件名的开始8位“20140121”只是编号,每个日期下会有多个编号
新手求指导

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2014-05-27 14:48 |只看该作者
本帖最后由 关阴月飞 于 2014-05-27 14:58 编辑

你这些文件名是直接在目录下获取,还是放在一个文件列表文件中?
linux 下:
gawk:
  1. awk -F-  '{a=substr($1,1,8)"/"$3; system("mkdir -p " a "&&cp -f "$0" "a)}'  file_list.txt
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
3 [报告]
发表于 2014-05-27 14:57 |只看该作者
又一个只贴图,还讲不清楚问题是啥的

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
4 [报告]
发表于 2014-05-27 15:02 |只看该作者
本帖最后由 Herowinter 于 2014-05-27 15:27 编辑

而且文件名中有空格,处理时还要小心。
好吧,我又看了一下那张图,我看花了,
前8位数字和后面的数字之间没有空格。。。

论坛徽章:
2
狮子座
日期:2014-05-30 21:43:03巳蛇
日期:2014-05-30 21:46:14
5 [报告]
发表于 2014-05-27 15:21 |只看该作者
本帖最后由 tgwz88 于 2014-05-27 15:27 编辑
  1. for x in `ls|sort`
  2. do
  3. mkdir -p ${x:24:8} ${x:24:8}/${x:0:8}
  4. mv $x ${x:24:8}/${x:0:8}/
  5. done
复制代码

论坛徽章:
0
6 [报告]
发表于 2014-05-27 15:25 |只看该作者
目录下的回复 2# 关阴月飞


   

论坛徽章:
0
7 [报告]
发表于 2014-05-27 15:33 |只看该作者
好吧!我什么都不懂!正在努力学习
有位网友这样给的,帮忙看看可对

#!/bin/sh

#创建上级目录
function CreateDir
{
    _g_dir=`echo $1|awk -F'-' '{print $3}'`
    if [ ! -d $_g_dir ]
    then
        mkdir $_g_dir
    fi
}

#创建子目录
function CreateSubDir
{
    _l_row=$1
    _g_subdir=${_l_row:0:8}
    if [ ! -d $_g_subdir ]
    then
        mkdir $_g_subdir
    fi
}

#文件拷贝
function CopyFile
{
    _l_dir="$_g_dir/$_g_subdir"
    cp $1 $_l_dir
}

#主函数
function main
{
    cat filename(待读取的文件) | while read line
    do
        #创建上级目录
        CreateDir $line
        #创建子目录
        CreateSubDir $line
        #文件拷贝
        CopyFile $line
    done
}

#调用入口
main $*


回复 3# expert1


   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
8 [报告]
发表于 2014-05-27 15:54 |只看该作者
本帖最后由 Herowinter 于 2014-05-27 16:05 编辑

回复 7# TOM2014
好像不需要那么多行吧。
  1. #!/bin/bash

  2. for file in `ls|grep -Po "[0-9]{8,}-[0-9]{8}-[0-9]{8}-.*\.dat\.Tdat"`
  3. do   
  4.     file_id=${file:0:8}
  5.     file_date=`grep -Po "(?<=-[0-9]{8}-)[0-9]{8}"<<<$file`
  6.     [ -d $file_date ] || mkdir $file_date
  7.     [ -d $file_date/$file_id ] || mkdir $file_date/$file_id
  8.     cp $file $file_date/$file_id
  9. done
复制代码
执行前
  1. ls
  2. 20140121163013-00160436-20140521-b00103383.dat.Tdat     33432341
  3. 20140121163013-1030436-20140521-b0010335556.dat.Tdat    cp.sh
  4. 20140121163013-32030436-20140521-b0010339999.dat.Tdat   cp.sh~
  5. 20140121163013-32030436-20140521-b0010339999.dat.Tdat1
复制代码
执行后
  1. ls 20140521/20140121
  2. 20140121163013-00160436-20140521-b00103383.dat.Tdat
  3. 20140121163013-32030436-20140521-b0010339999.dat.Tdat
复制代码

论坛徽章:
1
技术图书徽章
日期:2013-09-25 21:06:29
9 [报告]
发表于 2014-05-27 16:28 |只看该作者
回复 2# 关阴月飞


   这个system用得很赞~

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [报告]
发表于 2014-05-27 18:45 |只看该作者
@TOM2014 @Herowinter

>> ...文件名的开始8位“20140121”只是编号,每个日期下会有多个编号

20140521 !!??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP