Clear contents of a file

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.
integrosysAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

mdrichardsCommented:
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
TintinCommented:
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
integrosysAuthor Commented:
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
HTML5 and CSS3 Fundamentals

Build a website from the ground up by first learning the fundamentals of HTML5 and CSS3, the two popular programming languages used to present content online. HTML deals with fonts, colors, graphics, and hyperlinks, while CSS describes how HTML elements are to be displayed.

Brian UtterbackPrinciple Software EngineerCommented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
yongsingCommented:
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
TintinCommented:
If you use

du -sh file

You'll see the real size of the file.
0
Brian UtterbackPrinciple Software EngineerCommented:
Or use "ls -ls"
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Unix OS

From novice to tech pro — start learning today.