免费注册 查看新帖 |

Chinaunix

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

求助;复制文件夹中所有小于10K的txt到新文件夹 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-27 04:28 |只看该作者 |倒序浏览
   在文件夹中有几百个txt文档,用手工挑选出某些容量的文档累到手软,特求助各位大侠,谢谢!

论坛徽章:
1
金牛座
日期:2014-08-10 21:59:41
2 [报告]
发表于 2014-07-27 08:20 |只看该作者
本帖最后由 dav_ 于 2014-07-27 11:03 编辑
  1. #!/usr/bin/perl
  2. use File::Copy;
  3. my @files = map {
  4.         if(-s $_ < 10){ $_; }
  5.         else { (); }
  6. } glob '*.txt';
  7. move($_, 'dirname') for(@files);
复制代码
好像这样就可以了?

訂正:-s返回是位元組, 不是KB...  if(-s $_ < 10) 換為 if(-s $_ < 10 * 1024) 才正確.

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
3 [报告]
发表于 2014-07-27 08:23 |只看该作者
跟楼上类似{:3_193:}
  1. #!perl
  2. use strict;
  3. use File::Copy qw{copy};

  4. my $target_folder = '/tmp';
  5. my @files_lt_10k = grep {-s $_ < 1024 * 10} glob '*.txt';
  6. copy $_ => $target_folder for @files_lt_10k;

  7. __END__
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2014-07-27 09:46 |只看该作者
本帖最后由 hkldd 于 2014-07-27 09:56 编辑

感谢两位的回复!我试了一下没有成功,不知是什么原因,望指点下!谢谢!
附测试文件test,想把其中的1.txt、2.txt、5.txt小于10K的文档复制到新文件夹中

test.rar

661.22 KB, 下载次数: 10

论坛徽章:
1
金牛座
日期:2014-08-10 21:59:41
5 [报告]
发表于 2014-07-27 10:56 |只看该作者
哈哈, 我上面留的是错的, 真抱歉
3楼的我也不明白为什么不能复制,可能windows下不一样?
搜寻cpan没看到有 copy $file => $dirname 的用法, 可能我漏看了?
  1. #!/usr/bin/perl
  2. use File::Copy;
  3. my @files = grep {-s $_ < 10 * 1024} glob '*.txt';
  4. move($_, 'dirname') for @files;
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2014-07-27 11:28 |只看该作者
dav_大侠; 我试了一下,还是不行,我是要把小于10K的1.txt、2.txt、5.txt三个文档,完整的移到新文件夹中,不是合并,你的代码把它们三个文档合并了,还要修改一下,谢谢!

论坛徽章:
1
金牛座
日期:2014-08-10 21:59:41
7 [报告]
发表于 2014-07-27 11:36 |只看该作者
回复 6# hkldd

额, 你要把dirname换成你文件夹的名称, 应该不能打中文
move($_, 'dirname') for @files;  这句

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2014-07-27 12:33 |只看该作者
本帖最后由 hkldd 于 2014-07-27 12:42 编辑

dav_大侠;
   想麻烦你用上面的测试文件(4楼test.rar),讲解一下过程好吗,我试了还是不行,谢谢!

补充一下,我的环境是xp + perl5.16

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
9 [报告]
发表于 2014-07-27 13:26 |只看该作者
将$target_folder改成你要放置复制的文件的目录路径。把脚本放到你存放所有txt文件的目录,然后执行,应该就可以了
回复 4# hkldd


   

论坛徽章:
0
10 [报告]
发表于 2014-07-27 22:20 |只看该作者
  1. use File::Copy;
  2. use File::Find;
  3. my $dir="d:/test/test";
  4. my $tar="d:/new";

  5. find(\&wanted,$dir);
  6. sub wanted{
  7. copy ("$File::Find::name","$tar")  if /\.txt$/&& -f &&-s $_<10240;
  8. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP