求高手解答:find后无法直接清空文件内容的问题
当前目录下有很多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就变了)
请真正的高手来解答我的问题,谢谢!! 用下面的脚本试试#!/bin/bash
for i in `find ./server* -name "test.log" `
do
cat /dev/null > $i
done
目前问题已经绕道实现,跟楼上想法一样,暂时也是用for循环处理的:
for i in `find ./server* -name 'test.log'`
do
cat /dev/null > $i;
done;
可惜还是没想明白为啥find的-exec无法清空。。。 回复 1# xintop
-exec cp /dev/null {} \; 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 哦,楼上的 |bash 用的很巧妙,学习了,够强!!:em27: 哦,楼上的 |bash 用的很巧妙,学习了,够强!!:em27: 5楼强人, 一个awk|bash 与for 循环异曲同工之秒 回复 9# 疑似精神病
原来病哥是高手
犯了和我一样的问题,木有考虑子目录
页:
[1]
2