免费注册 查看新帖 |

Chinaunix

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

[文件目录] 如何实现大量小文件的分批处理 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-05 13:12 |只看该作者 |倒序浏览
本帖最后由 bikkuri 于 2014-12-05 13:53 编辑

大家好!
我有一个问题向大家请教。
在FTP服务器上某个目录下有大量的小文件,我在一个Linux服务器上把这些文件下载下来,然后再传给一个busybox系统去处理。
但是由于busybox的容量有限,一次只能处理的文件的总容量只有50M,所以我希望在Linux服务器端能把下载的文件按50M一批放进一个目录里,再让busybox按顺序下载这些目录里的文件。

FTP: file1 file2 file3 ... fileN
  ↓download
Linux: file1 file2 file3 ... fileN
            ↓divide into directories
          dir1 (file1 file2) dir2(file3 file4) ... dirN(...fileN)
                ↓download
Busybox: dir1 (file1 file2) (size less than 50M)

请问在Linux服务器端应该如何写一个脚本,按照每50M创建一个目录的方式自动分拣文件呢?
谢谢!

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
2 [报告]
发表于 2014-12-05 13:16 |只看该作者
回复 1# bikkuri
split分割一下就行了!


   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
3 [报告]
发表于 2014-12-05 13:52 |只看该作者
split - split a file into pieces
split是把一个大文件分割成小文件。
我想做的是大量小文件分批。
不是一回事好哇。

zxy877298415 发表于 2014-12-05 13:16
回复 1# bikkuri
split分割一下就行了!

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
4 [报告]
发表于 2014-12-05 14:33 |只看该作者
文件有顺序要求咩?

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
5 [报告]
发表于 2014-12-05 14:45 |只看该作者

给个思路:
  1. find -type f -ls | awk 'BEGIN{n=1}{sum+=$7;if(sum>=50*1024*1024){n++;sum=0;print "mkdir dir"n}print "cp "$NF" dir"n}'
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
6 [报告]
发表于 2014-12-05 16:15 |只看该作者
本帖最后由 bikkuri 于 2014-12-05 16:26 编辑

谢谢您的回复。
  1. [box@cloud1:test]$ for file in $(seq 100);do echo $file > $file;done
  2. [box@cloud1:test]$ ls
  3. 1    12  16  2   23  27  30  34  38  41  45  49  52  56  6   63  67  70  74  78  81  85  89  92  96
  4. 10   13  17  20  24  28  31  35  39  42  46  5   53  57  60  64  68  71  75  79  82  86  9   93  97
  5. 100  14  18  21  25  29  32  36  4   43  47  50  54  58  61  65  69  72  76  8   83  87  90  94  98
  6. 11   15  19  22  26  3   33  37  40  44  48  51  55  59  62  66  7   73  77  80  84  88  91  95  99
  7. [box@cloud1:test]$ find -type f -ls | awk 'BEGIN{n=1}{sum+=$7;if(sum>=10){n++;sum=0;print "mkdir dir"n}print "cp "$NF" dir"n}' > div.sh
  8. [box@cloud1:test]$ cat div.sh
  9. cp ./4 dir1
  10. cp ./38 dir1
  11. cp ./79 dir1
  12. mkdir dir2
  13. cp ./9 dir2
  14. cp ./48 dir2
  15. cp ./64 dir2
  16. cp ./68 dir2
  17. mkdir dir3
  18. cp ./5 dir3
  19. cp ./13 dir3
  20. cp ./89 dir3
  21. cp ./96 dir3
  22. mkdir dir4
  23. cp ./21 dir4
  24. cp ./59 dir4
  25. cp ./52 dir4
  26. cp ./25 dir4
  27. mkdir dir5
  28. cp ./6 dir5
  29. cp ./29 dir5
  30. cp ./90 dir5
  31. cp ./61 dir5
  32. mkdir dir6
  33. cp ./86 dir6
  34. cp ./77 dir6
  35. cp ./85 dir6
  36. cp ./87 dir6
  37. mkdir dir7
  38. cp ./46 dir7
  39. cp ./24 dir7
  40. cp ./74 dir7
  41. cp ./88 dir7
  42. mkdir dir8
  43. cp ./40 dir8
  44. cp ./67 dir8
  45. cp ./32 dir8
  46. cp ./55 dir8
  47. mkdir dir9
  48. cp ./65 dir9
  49. cp ./54 dir9
  50. cp ./8 dir9
  51. cp ./2 dir9
  52. mkdir dir10
  53. cp ./98 dir10
  54. cp ./30 dir10
  55. cp ./78 dir10
  56. cp ./72 dir10
  57. mkdir dir11
  58. cp ./66 dir11
  59. cp ./93 dir11
  60. cp ./39 dir11
  61. cp ./41 dir11
  62. mkdir dir12
  63. cp ./36 dir12
  64. cp ./73 dir12
  65. cp ./53 dir12
  66. cp ./95 dir12
  67. mkdir dir13
  68. cp ./83 dir13
  69. cp ./99 dir13
  70. cp ./37 dir13
  71. cp ./18 dir13
  72. mkdir dir14
  73. cp ./11 dir14
  74. cp ./22 dir14
  75. cp ./91 dir14
  76. cp ./70 dir14
  77. mkdir dir15
  78. cp ./47 dir15
  79. cp ./57 dir15
  80. cp ./69 dir15
  81. cp ./56 dir15
  82. mkdir dir16
  83. cp ./97 dir16
  84. cp ./45 dir16
  85. cp ./16 dir16
  86. cp ./82 dir16
  87. mkdir dir17
  88. cp ./81 dir17
  89. cp ./20 dir17
  90. cp ./34 dir17
  91. cp ./63 dir17
  92. mkdir dir18
  93. cp ./62 dir18
  94. cp ./35 dir18
  95. cp ./31 dir18
  96. cp ./42 dir18
  97. mkdir dir19
  98. cp ./92 dir19
  99. cp ./26 dir19
  100. cp ./76 dir19
  101. cp ./div.sh dir19
  102. cp ./80 dir19
  103. mkdir dir20
  104. cp ./28 dir20
  105. cp ./71 dir20
  106. cp ./15 dir20
  107. cp ./3 dir20
  108. mkdir dir21
  109. cp ./33 dir21
  110. cp ./51 dir21
  111. cp ./1 dir21
  112. cp ./49 dir21
  113. mkdir dir22
  114. cp ./14 dir22
  115. cp ./43 dir22
  116. cp ./19 dir22
  117. cp ./94 dir22
  118. mkdir dir23
  119. cp ./60 dir23
  120. cp ./7 dir23
  121. cp ./17 dir23
  122. cp ./44 dir23
  123. mkdir dir24
  124. cp ./58 dir24
  125. cp ./23 dir24
  126. cp ./84 dir24
  127. cp ./27 dir24
  128. mkdir dir25
  129. cp ./75 dir25
  130. cp ./12 dir25
  131. cp ./100 dir25
  132. mkdir dir26
  133. cp ./50 dir26
  134. cp ./10 dir26
  135. [box@cloud1:test]$
复制代码
好像dir1没有mkdir,所以4和38丢失,79被改名为dir1了。
由于所有的文件都在一个目录下面,貌似可以不用find,直接用ls -l就可以了。

回复 5# reyleon


   

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
7 [报告]
发表于 2014-12-05 16:46 |只看该作者
回复 6# bikkuri


    呃呃, 是, 意思到了就行, 你不是也看出来了嘛

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
8 [报告]
发表于 2014-12-05 17:46 |只看该作者
那为什么mkdir dir1没有被打印出来呢?
那条awk语句有什么问题吗?

reyleon 发表于 2014-12-05 16:46
回复 6# bikkuri

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
9 [报告]
发表于 2014-12-05 17:56 |只看该作者
回复 8# bikkuri


    是有点小问题呀, 你既然都看出没打印出来了, 我还以为你发现问题了呢...
  1. find -type f -ls | awk 'BEGIN{n=1;print "mkdir dir"n}{sum+=$7;if(sum>=50*1024*1024){n++;sum=0;print "mkdir dir"n}print "cp "$NF" dir"n}'
复制代码
如果你实际要用的话, 就把 print 改为 system
  1. find -type f -ls | awk 'BEGIN{n=1;system("mkdir dir"n)}{sum+=$7;if(sum>=50*1024*1024){n++;sum=0;system("mkdir dir"n)}system("cp "$NF" dir"n)}'
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
10 [报告]
发表于 2014-12-05 18:51 |只看该作者
谢谢!
我用的是:
  1. eval "$(find -type f -ls | awk 'BEGIN{n=1;print "mkdir dir"n}{sum+=$7;if(sum>=50*1024*1024){n++;sum=0;print "mkdir dir"n}print "cp "$NF" dir"n}')"
复制代码
回复 9# reyleon


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP