当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 递归处理后find选项对子目录不起作用的问题
帖子发表于 : 2009-11-06 21:08 

注册: 2009-04-14 22:23
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
我想把当前目录(包括子目录)下文件大小小于1000k的文件复制到size-1000k文件夹中,执行如下命令find ./ -size -1000k -a ! -name '*.o' | xargs -i cp -r {} size-1000k/后发现拷过去的文件中有很多大于1000k的文件中(都在子目录下),后来我又试了find ./ -size -1000k -a ! -name '*.o' -exec cp -r {} size-1000k/ \;还是一样。不用-r递归处理不会出现这种情况但子目录路径全丢失了,我把这个问题归结为递归处理后find选项对子目录不起作用。 请问有谁能解决这个问题?有没有一种方法可以既保留子目录路径又不出现大于1000k的文件?我在网上google了好多相关文章都没找到解决办法所以只好来论坛请教高手,有知悉者请不吝指教。非常感谢!!


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 递归处理后find选项对子目录不起作用的问题
帖子发表于 : 2009-11-07 7:17 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
是不是想把小于1000K的普通文件复制到 size-1000k 下但保留目录结构?这种操作可以用可以用 cpio,也可以用 tar。在 find 中加上 -type f 限制只查找普通文件。
代码:
find . -type f -size -1000k \! -name '*.o' |  tar cT - | tar Cxv ../size-1000k

我把 size-1000k 放到上一级目录了,因为我不清楚往 find 正在操作的目录中增加文件会有什么后果。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 递归处理后find选项对子目录不起作用的问题
帖子发表于 : 2009-11-07 8:16 

注册: 2008-10-31 22:12
帖子: 6546
系统: 践兔
送出感谢: 18
接收感谢: 25
反过来想一想
代码:
find ./ -size -1000k -a ! -name '*.o' -exec cp -r {} size-1000k/ \;

打个比方,比如找到的文件是helloworld/helloworld,执行的命令就是cp -r helloworld/helloworld size-1000k/,跟cp -r helloworld/helloworld size-1000k/helloworld效果一样
子目录当然没有了
代码:
mkdir -pv size-1000k
tar -c $(find . -size -1000k -a ! -name '*.o' -path './size-1000k/*') | tar -xC size-1000k


_________________
代码:
] ls -ld //


最后由 tusooa 编辑于 2009-11-08 20:32,总共编辑了 2 次

页首
 用户资料  
 
4 楼 
 文章标题 : Re: 递归处理后find选项对子目录不起作用的问题
帖子发表于 : 2009-11-07 15:02 
头像

注册: 2009-10-13 12:58
帖子: 11
送出感谢: 0 次
接收感谢: 0 次
看到一堆的参数,真是让人羡慕啊。。我咋不会呢,
find . -type f -size -1000k \! -name '*.o' | tar cT - | tar Cxv ../size-1000k


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 递归处理后find选项对子目录不起作用的问题
帖子发表于 : 2009-11-07 15:07 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
t1e2s3t4 写道:
看到一堆的参数,真是让人羡慕啊。。我咋不会呢,
find . -type f -size -1000k \! -name '*.o' | tar cT - | tar Cxv ../size-1000k

可能陌生点的参数就是 tar 的 T 和 C 吧,T 表示从文件中读取要归档的文件列表,因后面跟的参数是 -,所以就是从标准输入读取。C 是更改工作目录。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 递归处理后find选项对子目录不起作用的问题
帖子发表于 : 2009-11-08 13:09 

注册: 2009-04-14 22:23
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
非常感谢aerofox!!你的命令可行而且不用size-1000k不用放到上层目录也是对的。
tusooa的命令有问题,把( ) 加上反引号后还是不对;另外你的解释也有问题吧,加上-r 选项后目录结构是有的,但就是find的参数-size -1000k 对子目录无效。不过还是谢谢你的热心回答。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 递归处理后find选项对子目录不起作用的问题
帖子发表于 : 2009-11-08 20:32 

注册: 2008-10-31 22:12
帖子: 6546
系统: 践兔
送出感谢: 18
接收感谢: 25
加了-r目录结构也没有阿
代码:
08/11/2009 20:28:28
tusooa (/tmp/test)
>> find ./ -type f -size -1000k -a ! -name '*.o' ! -path './size-1000k/*' -exec cp -r {} size-1000k/ \;
08/11/2009 20:28:32
tusooa (/tmp/test)
>> ls -l helloworld/ size-1000k/
helloworld/:
总用量 4
-rw-rw-r-- 1 tusooa tusooa 31 11月  8 20:25 helloworld

size-1000k/:
总用量 4
-rw-rw-r-- 1 tusooa tusooa 31 11月  8 20:28 helloworld

ps:前面的命令少加了一个`$'


_________________
代码:
] ls -ld //


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 递归处理后find选项对子目录不起作用的问题
帖子发表于 : 2009-11-08 23:45 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
cp 时,对普通文件加 -r 没有意义。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译