免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 24628961 | 回复: 24628961

求高手解答:find后无法直接清空文件内容的问题 [复制链接]

论坛徽章:
0
发表于 2011-09-15 11:44 |显示全部楼层
当前目录下有很多server开头的目录,如server1,server2,server3...
每个目录中都有一个test.log文件
我希望通过命令把每个目录下的test.log文件清空
于是我用下面的命令,但是都无法清空:
find ./server* -name 'test.log' -exec echo  > {} \;
find ./server* -name 'test.log' -exec cat /dev/null  > {} \;
find ./server* -name 'test.log' -exec echo "" > {} \;

我执行cat /dev/null  > ./server1/test.log,是可以成功清空的,表明exec参数后面的命令没有问题

我执行下面的命令也能成功删除文件,
find ./server* -name 'test.log' -exec rm -rf {} \;

但我想要的是清空文件内容,而不是删除文件,
(请不要告诉我删除文件后创建新文件,那样文件inode就变了)

请真正的高手来解答我的问题,谢谢!!

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2011-09-15 13:58 |显示全部楼层
用下面的脚本试试
  1. #!/bin/bash
  2. for i in `find ./server* -name "test.log" `
  3. do
  4. cat /dev/null > $i
  5. done
复制代码

论坛徽章:
0
发表于 2011-09-15 14:06 |显示全部楼层
目前问题已经绕道实现,跟楼上想法一样,暂时也是用for循环处理的:

for i in `find ./server* -name 'test.log'`
do
  cat /dev/null > $i;
done;

可惜还是没想明白为啥find的-exec无法清空。。。

论坛徽章:
0
发表于 2011-09-15 14:32 |显示全部楼层
回复 1# xintop


    -exec cp /dev/null {} \;

论坛徽章:
1
天秤座
日期:2013-10-23 13:20:42
发表于 2011-09-15 23:07 |显示全部楼层
monitor:/home/monitor/testtest>tree
.
|-- all2.sql
|-- oo2.txt
|-- server1
|   `-- a
|       |-- b
|       |   |-- c
|       |   |   `-- test.log
|       |   `-- test.log
|       `-- test.log
|-- server2
|   `-- test.log
|-- server3
|   |-- dir3
|   |   |-- dir4
|   |   |   `-- test.log
|   |   `-- test.log
|   `-- test.log
`-- {}


monitor:/testtest>find ./server* -name 'test.log' |xargs -i ls -l {} ;
-rw-r--r-- 1 monitor monitor 1179 Sep 15 22:55 ./server1/a/test.log
-rw-r--r-- 1 monitor monitor 1179 Sep 15 22:55 ./server1/a/b/test.log
-rw-r--r-- 1 monitor monitor 1179 Sep 15 22:55 ./server1/a/b/c/test.log
-rw-r--r-- 1 monitor monitor 1179 Sep 15 22:56 ./server2/test.log
-rw-r--r-- 1 monitor monitor 1179 Sep 15 22:56 ./server3/test.log
-rw-r--r-- 1 monitor monitor 1179 Sep 15 22:56 ./server3/dir3/test.log
-rw-r--r-- 1 monitor monitor 1179 Sep 15 22:56 ./server3/dir3/dir4/test.log

monitor:/home/monitor/testtest>find ./server* -name 'test.log'  -print|awk '{print "echo > "$0}'
echo > ./server1/a/test.log
echo > ./server1/a/b/test.log
echo > ./server1/a/b/c/test.log
echo > ./server2/test.log
echo > ./server3/test.log
echo > ./server3/dir3/test.log
echo > ./server3/dir3/dir4/test.log
monitor:/home/monitor/testtest>find ./server* -name 'test.log'  -print|awk '{print "echo > "$0}'|bash
monitor:/home/monitor/testtest>find ./server* -name 'test.log'  -exec ls -l {} \;
-rw-r--r-- 1 monitor monitor 1 Sep 15 23:15 ./server1/a/test.log
-rw-r--r-- 1 monitor monitor 1 Sep 15 23:15 ./server1/a/b/test.log
-rw-r--r-- 1 monitor monitor 1 Sep 15 23:15 ./server1/a/b/c/test.log
-rw-r--r-- 1 monitor monitor 1 Sep 15 23:15 ./server2/test.log
-rw-r--r-- 1 monitor monitor 1 Sep 15 23:15 ./server3/test.log
-rw-r--r-- 1 monitor monitor 1 Sep 15 23:15 ./server3/dir3/test.log
-rw-r--r-- 1 monitor monitor 1 Sep 15 23:15 ./server3/dir3/dir4/test.log

论坛徽章:
0
发表于 2011-09-16 13:54 |显示全部楼层
哦,楼上的 |bash 用的很巧妙,学习了,够强!!

论坛徽章:
0
发表于 2011-09-16 13:57 |显示全部楼层
哦,楼上的 |bash 用的很巧妙,学习了,够强!!

论坛徽章:
0
发表于 2011-09-16 14:39 |显示全部楼层
5楼强人, 一个awk|bash 与for 循环异曲同工之秒

论坛徽章:
0
发表于 2011-09-16 14:55 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2011-09-16 15:48 |显示全部楼层
回复 9# 疑似精神病


    原来病哥是高手

犯了和我一样的问题,木有考虑子目录
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP