免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mark1981
打印 上一主题 下一主题

如何简便得删除一个目录下得大量文件除了某一个文件 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-03-03 22:52 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

好,又多学了几招!

论坛徽章:
0
12 [报告]
发表于 2005-03-04 08:48 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

如果文件不大,直接cp到别的地方再cp回来。
我发现当目录下的文件是10000或者以上的时候,rm会说参数太多,不会执行的。
-bash: /bin/rm: Argument list too long

论坛徽章:
0
13 [报告]
发表于 2005-03-04 11:30 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

参数是有数量限制的,记得十三问中好象有提到。
用*扩展文件名做参数也有这个问题,超过限制就扩展不了了~
只好用xargs了,所以对于文件少的情况,aerofox兄的方法不能将效率提高得很明显,对文件多得情况,又无法适用。因此,个人推荐烈火兄的“ls|xargs”法

论坛徽章:
0
14 [报告]
发表于 2005-03-04 11:37 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

这个命令:ls !(file) 能执行吗?

论坛徽章:
0
15 [报告]
发表于 2005-03-04 11:37 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

用xargs不会造成多个进程的,呵呵。exce反而会

论坛徽章:
0
16 [报告]
发表于 2005-03-04 13:08 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

原帖由 "一梦如是" 发表:
参数是有数量限制的,记得十三问中好象有提到。
用*扩展文件名做参数也有这个问题,超过限制就扩展不了了~
只好用xargs了,所以对于文件少的情况,aerofox兄的方法不能将效率提高得很明显,对文件多得情况,又无法..........

当xargs后没有带-L参数时,它实际上是把前面命令的输出全部组合到一条命令中,所以参数个数并没有减少。
  1. ls * | xargs rm
复制代码

这条命令的执行过程是:首先shell把*扩展为当前目录下的所有目录项(隐藏文件除外),然后把它传给ls,ls把这些参数显示到标准输出,这个输出再传给xargs,而xargs把ls的输出组合到一起,并把它传给rm,rm执行它的删除任务。这个过程除了rm命令会接收一大堆参数外,ls也接收了一大堆参数。

论坛徽章:
0
17 [报告]
发表于 2005-03-04 13:09 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

这个命令:ls !(file) 能执行吗?
我用这个怎么说:bash: !: event not found

论坛徽章:
0
18 [报告]
发表于 2005-03-04 14:05 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

ls *|xargs rm与ls|xargs rm效果基本相同,和rm *不一样,ls似乎可以接受无限的参数,rm不可以,如archangle兄所言,超过10000文件时,前二命令可以执行,第三个则会报错,这应该是命令本身能接受参数的限制。而xargs传参的方式也不是简单的如*般扩展参数。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
19 [报告]
发表于 2005-03-04 14:10 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

原帖由 "rockally" 发表:
这个命令:ls !(file) 能执行吗?
我用这个怎么说:bash: !: event not found

看人家的环境ksh

论坛徽章:
0
20 [报告]
发表于 2005-03-04 14:50 |只看该作者

如何简便得删除一个目录下得大量文件除了某一个文件

[quote]原帖由 "一梦如是"]ls *|xargs rm与ls|xargs rm效果基本相同,和rm *不一样,ls似乎可以接受无限的参数,rm不可以,如archangle兄所言,超过10000文件时,前二命令可以执行,第三个则会报错,这应该是命令本身能接受参数的限制。而xarg..........[/quote 发表:

我还是不太理解它们之间的区别。只要通过exec系统功能调用,按说就应该是一样的。也不知到参数数目的上限是多少,我试了一下,当目录下有15000个文件时,rm *是能正常工作的。

  1. mkdir /tmp/rm
  2. cd /tmp/rm
  3. for ((i=0; i<15000; i++)); do
  4.     touch $i
  5. done
  6. ls
  7. rm *
复制代码

以上代码在Solaris 7上正确执行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP