Solved

Clear contents of a file

Posted on 2007-03-28
7
1,655 Views
Last Modified: 2013-12-27
Let's say that I have a Java program running, with its standard output directed to a log file:

java MyJavaProgram > stdout.log

This program will keep on running. To ensure that the log file does not grow very big, I am trying to write a script to remove the contents of the file. I tried two ways:

echo "" > stdout.log

cp /dev/null stdout.log

But in both cases, they are writting a lot of null characters into the log file. The file does not shrink at all. The contents are merely replaced with null characters.

How can I achive what I want? Thanks.
0
Comment
Question by:integrosys
7 Comments
 
LVL 5

Expert Comment

by:mdrichards
ID: 18814032
You could remove the file then "touch" it

rm -f stdout.log
touch stdout.log

This is probably not the most ideal scenario as you "may" need to reset user / group permissions.
0
 
LVL 48

Expert Comment

by:Tintin
ID: 18814153
You can only reliably truncate a file when it's not being written to.

Do you have any control over the java program, ie: can you restart it?

Easiest way to truncate a file is

>stdout.log
0
 

Author Comment

by:integrosys
ID: 18814216
Thanks guys. Actually I found that these two lines:

echo "" > stdout.log
cp /dev/null stdout.log

will work if the Java program is started this way instead:

java MyJavaProgram >> stdout.log
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 22

Accepted Solution

by:
blu earned 50 total points
ID: 18844166
The problem you were seeing in the first instance is that the java program's file pointer continues to point to the same block that it is writing to even after you have truncated the file. Thus when it writes again, it writes to the same block it would have written to before you truncated. This actually does not fill in the file with nulls, it only appears to. It actually transforms the file into a sparse file. It will not actually allocate storage blocks for the intervening null blocks. If space is your only concern, then this may be enough.

You can see why converting to >> work though. The >> says to append to the file, which means that all blocks are written to the end of the file. This means that once the file is truncated, the end of the file becomes the beginning as it were.
0
 
LVL 9

Expert Comment

by:yongsing
ID: 18844354
Hi blu, what is a sparse file? You said that it does not allocate storage blocks. But when I use the ls command, I notice that the file size never decreases.
0
 
LVL 48

Expert Comment

by:Tintin
ID: 18847201
If you use

du -sh file

You'll see the real size of the file.
0
 
LVL 22

Expert Comment

by:blu
ID: 18852087
Or use "ls -ls"
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction Regular patching is part of a system administrator's tasks. However, many patches require that the system be in single-user mode before they can be installed. A cluster patch in particular can take quite a while to apply if the machine…
I promised to write further about my project, and here I am.  First, I needed to setup the Primary Server.  You can read how in this article: Setup FreeBSD Server with full HDD encryption (http://www.experts-exchange.com/OS/Unix/BSD/FreeBSD/A_3660-S…
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…
In a previous video, we went over how to export a DynamoDB table into Amazon S3.  In this video, we show how to load the export from S3 into a DynamoDB table.

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now