递归处理后find选项对子目录不起作用的问题
-
- 帖子: 16
- 注册时间: 2009-04-14 22:23
递归处理后find选项对子目录不起作用的问题
我想把当前目录(包括子目录)下文件大小小于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了好多相关文章都没找到解决办法所以只好来论坛请教高手,有知悉者请不吝指教。非常感谢!!
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 递归处理后find选项对子目录不起作用的问题
是不是想把小于1000K的普通文件复制到 size-1000k 下但保留目录结构?这种操作可以用可以用 cpio,也可以用 tar。在 find 中加上 -type f 限制只查找普通文件。
我把 size-1000k 放到上一级目录了,因为我不清楚往 find 正在操作的目录中增加文件会有什么后果。
代码: 全选
find . -type f -size -1000k \! -name '*.o' | tar cT - | tar Cxv ../size-1000k
-
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
- 联系:
Re: 递归处理后find选项对子目录不起作用的问题
反过来想一想
打个比方,比如找到的文件是helloworld/helloworld,执行的命令就是cp -r helloworld/helloworld size-1000k/,跟cp -r helloworld/helloworld size-1000k/helloworld效果一样
子目录当然没有了
代码: 全选
find ./ -size -1000k -a ! -name '*.o' -exec cp -r {} size-1000k/ \;
子目录当然没有了
代码: 全选
mkdir -pv size-1000k
tar -c $(find . -size -1000k -a ! -name '*.o' -path './size-1000k/*') | tar -xC size-1000k
上次由 tusooa 在 2009-11-08 20:32,总共编辑 2 次。
代码: 全选
] ls -ld //
- t1e2s3t4
- 帖子: 11
- 注册时间: 2009-10-13 12:58
Re: 递归处理后find选项对子目录不起作用的问题
看到一堆的参数,真是让人羡慕啊。。我咋不会呢,
find . -type f -size -1000k \! -name '*.o' | tar cT - | tar Cxv ../size-1000k
find . -type f -size -1000k \! -name '*.o' | tar cT - | tar Cxv ../size-1000k
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 递归处理后find选项对子目录不起作用的问题
可能陌生点的参数就是 tar 的 T 和 C 吧,T 表示从文件中读取要归档的文件列表,因后面跟的参数是 -,所以就是从标准输入读取。C 是更改工作目录。t1e2s3t4 写了:看到一堆的参数,真是让人羡慕啊。。我咋不会呢,
find . -type f -size -1000k \! -name '*.o' | tar cT - | tar Cxv ../size-1000k
-
- 帖子: 16
- 注册时间: 2009-04-14 22:23
Re: 递归处理后find选项对子目录不起作用的问题
非常感谢aerofox!!你的命令可行而且不用size-1000k不用放到上层目录也是对的。
tusooa的命令有问题,把( ) 加上反引号后还是不对;另外你的解释也有问题吧,加上-r 选项后目录结构是有的,但就是find的参数-size -1000k 对子目录无效。不过还是谢谢你的热心回答。
tusooa的命令有问题,把( ) 加上反引号后还是不对;另外你的解释也有问题吧,加上-r 选项后目录结构是有的,但就是find的参数-size -1000k 对子目录无效。不过还是谢谢你的热心回答。
-
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
- 联系:
Re: 递归处理后find选项对子目录不起作用的问题
加了-r目录结构也没有阿
ps:前面的命令少加了一个`$'
代码: 全选
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
代码: 全选
] ls -ld //
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 递归处理后find选项对子目录不起作用的问题
cp 时,对普通文件加 -r 没有意义。