Operating System - HP-UX
1819859 Members
2707 Online
109607 Solutions
New Discussion юеВ

Re: delete everything and check whether everything is deleted or not

 
SOLVED
Go to solution
pareshan
Regular Advisor

delete everything and check whether everything is deleted or not

Hi Everyone,

How Can I delete everything from directory
( including hidden files, system files, ready only, .extension **Nothing should be there at all).
and after deleting I need to check also to make sure everything is working fine and there is nothing left. If there are something which I cant delete then I have to send mail to my email address.
I am trying so many things but nothing is completely working. I believe there is a way to do these things efficiently.

Thanks In Advance
I will appreciate any help

18 REPLIES 18
James R. Ferguson
Acclaimed Contributor

Re: delete everything and check whether everything is deleted or not

Hi:

Use this very carefully as root and *nothing* including the directory will be left...and there will be no need to check:

# rm -rf /path

Regards!

...JRF...
Mark McDonald_2
Trusted Contributor

Re: delete everything and check whether everything is deleted or not

As JRF says - rm -rf /path

If you want to keep the directory its self, you could use JRF's method then recreate the empty dir or

rm -rf /dir/*
rm -rf /dir/.* (to remove hidden files)


>>>> and after deleting I need to check also to make sure everything is working fine and there is nothing left. If there are something which I cant delete then I have to send mail to my email address.

You need to count the files or check for file left in the directory after the delete. shouldnt be too hard.

if [[ -f /dir/* ]] (or something similar)
Mark McDonald_2
Trusted Contributor

Re: delete everything and check whether everything is deleted or not

Perhaps put a check before the delete too:

if [[ $path != "/" ]] Just an idea....
then
rm -rf /$path/*
fi
Dennis Handly
Acclaimed Contributor

Re: delete everything and check whether everything is deleted or not

>Mark: rm -rf /dir/.* (to remove hidden files)

You don't want that, that will remove the parent directory.
Better to remove the whole directory as JRF said, rather than make this mistake.
This should work: ll ..?* * .[_0-9A-z]*
But this won't find ".+", unless added above.
\ls -a /dir | fgrep -x -v -e . -e ..
Will exclude "." and "..".
Dennis Handly
Acclaimed Contributor

Re: delete everything and check whether everything is deleted or not

Ok, this works better, the first two for hidden files:
ll .[!.]* ..?* *
pareshan
Regular Advisor

Re: delete everything and check whether everything is deleted or not

James & Mark,

U R right but I cant remove the directory itself. I dont have privilege to delete and make another one. Only thing I can do here is I can delete whatever is inside the directory and its must for me I have to make it empty in any case and put new files there.

Dennis,
>> ll .[!.]* ..?* * --> is this for testing whether anything is left in the directory? or have to use with rm -rf to remove everything?

that means to remove everything
rm -rf dir/*
rm -rf dir/.*
will work?

Im confused. Could U plz help me.
thanks alot
OldSchool
Honored Contributor

Re: delete everything and check whether everything is deleted or not

"Only thing I can do here is I can delete whatever is inside the directory and its must for me"

if you are saying you only want to delete the files within the directory that you own, as opposed to those that are there and you can access, that's something else altogether.

It would help if you clearly explained precisely what is is you need to accomplish (ie a statement of the end result rather than the actions you want to do to get there)
pareshan
Regular Advisor

Re: delete everything and check whether everything is deleted or not

I just want to delete the contains of the directory inlcuding (hidden files, ready only, system files) I mean everything to be precise. And while deleting in case there are files or directories which I cant delete coz of any reason or I dont have permissiom to delete those I should send email to admin or responsible person saying script is causing error coz I dont have privilege to delete everything or there are files or directories which is not deletable.

I need this coz I am trying to delete the old contains of directories and paste new version of files in it.

the script I have tried is

rm -rf ${dest_dir}/*
rm -rf ${dest_dir}/.*

if [[ ll .[!.]* ..?* * |wc -l != 0 ]]; then
echo "! Tar Error!! Scipt is not able to delete ${dest_dir} in ${DHOST} server while code push \n"|mail -x "Urget Tar Error" support@gmail.com
exit

else
echo "${dest_dir} is empty now U can proceed \n"
fi


But I am not sure about my code but I believe there is a better way to write it
Dennis Handly
Acclaimed Contributor
Solution

Re: delete everything and check whether everything is deleted or not

>I can't remove the directory itself. I don't have privilege to delete and make another one.

That may make it easier. Just "rm -rf" the directory, then only the last step will fail. Then check to see if there is anything left in it. (Make sure you try it first to see if it never starts because of the permissions.)

> ll .[!.]* ..?* * --> is this for testing whether anything is left in the directory? or have to use with rm -rf to remove everything?

Both.

>that means to remove everything
rm -rf dir/*
rm -rf dir/.*

No, exactly as I had:
rm -rf dir/* dir/.[!.]* dir/..?*

>I just want to delete the contents of the directory including (hidden files, read only, system files)

There is no such thing as system files as a file property. Hidden files are just a shell and ls(1) convention.

>I don't have permission to delete those I should send email to admin or responsible person

If the rm exit status is bad, you can send a message. But you may want to check the ls output for a more positive check. ls -R would actually list the files in question too.

>if [[ ll .[!.]* ..?* * |wc -l != 0 ]]; then

I doubt this works. You need to test this:
lines=$(ls -a ${dest_dir} | wc -l)
If there is nothing there, you may still see one line, or 3 for . and ..? If so, adjust the number below.
if [ "$lines" -gt 1 ]; then
...
Bill Hassell
Honored Contributor

Re: delete everything and check whether everything is deleted or not

> I don't have permission to delete those...

This is easy to determine before you start. You cannot delete *anything* in a directory where your userID and groupID do not have write access. Here is are the rules:

- A file's permission controls the contents of the file.

but

- The directory's permission control the existence of any files or subdirectories.

If you have write permission in a directory, then you can remove or rename anything in the directory. There may be a file in the directory that is owned by root and has permission 600 - you cannot read or write that file, but if you can write to the directory, you can remove that file. Same for directories inside that directory.

The one exception is if the directory has the "sticky" bit set. This is a special setting that is often used on 777 directories like /tmp and /var/tmp. Rather than allow a free-for-all setting where anyone can trash the contents of an open directory, the sticky bit requires that the user removing or renaming a file in that directory actually own that file or the directory with the file in it.

To see if the sticky bit is set, use this command on the directory:

ll -d /path_to_directory

A typical setting for /tmp would be drwxrwxrwx but with the sticky bit set, the permissions will be drwxrwxrwt (the "t" specifies this option).

> including hidden files, system files, ready only, .extension ...

These are PC concepts and don't apply in Unix. A hidden file is nothing more than a file or directory name that starts with a period ".". It is not really hidden -- shell and other file listing tools like ls and ll will by default, not show dot files and directories. That ends the 'special' meaning for filenames. Most sysadamins will alias ls and ll to always set the -a option to always show dot files. Note that the current (pwd) and parent directory have the names: . and .. which will show up with ll -a.

Read-only for files is not meaningful for removal, and extensions have no special meaning in HP-UX.


Bill Hassell, sysadmin
Bill Hassell
Honored Contributor

Re: delete everything and check whether everything is deleted or not

One additional comment:

> that means to remove everything
> rm -rf dir/*
> rm -rf dir/.*
> will work?

rm -rf dir/* is OK for files without a leading dot.

rm -rf dir/.* is very bad! The ".*" pattern match will return all dot files INCLUDING the current directory *and* the ".." or parent directory. To see what .* matches, use these commands:

echo .*
ll .*

Avoid using ".*" as a pattern until you verify all the matches.


Bill Hassell, sysadmin
Sajjad Sahir
Honored Contributor

Re: delete everything and check whether everything is deleted or not

Dear
rm -rf is the command to delete everything
but should careful to use this command.
if u are using always u should present dir
ok
Bill Hassell
Honored Contributor

Re: delete everything and check whether everything is deleted or not

And just to clarify a bit:

> but I cant remove the directory itself. I dont have privilege to delete and make another one.

If you cannot re-create the directory, then you cannot remove it. Thus, the simplest form mentioned at the beginning:

rm -rf /path_to/my_directory

will remove everything in the directory and return an error message that it cannot delete my_directory. If my_directory is indeed removed, then you have the ablity to run mkdir my_directory and put the directory back again. As mentioned above, you cannot delete files or directories unless you can write to the parent directory. If you can't make another directory then you cannot remove it either.


Bill Hassell, sysadmin
Fadia Almarei
Super Advisor

Re: delete everything and check whether everything is deleted or not

just remove the directory completly and then recreate it
cd $DIR.PATH
rm -rf dir
mkdir dir
fadia.marei
Fredrik.eriksson
Valued Contributor

Re: delete everything and check whether everything is deleted or not

As they said, if the files are read only you can't delete them without answering yes.

#!/bin/sh
dirpath=/path/to/directory
chmod -R 666 $dirpath
rm -rf $dirpath
mkdir -p $dirpath

This will make all files recursively writeable and delete the lot then create the directory again (-p just says create the whole tree structure).

This will only work if you own the files or do this as root.
You can extend this by adding a test (like [ -d $dirpath ] after the "rm -rf") to check if the directory is really gone and then add a mail or whatever.

Best regards
Fredrik Eriksson
Dennis Handly
Acclaimed Contributor

Re: delete everything and check whether everything is deleted or not

>Fredrik: if the files are read only you can't delete them without answering yes.

The -f removes them without a query. But you are correct if you don't have write permission to directories.

>chmod -R 666 $dirpath

This isn't going to help if you remove execute permission. Better to use:
chmod -R a+w $dirpath

>This will only work if you own the files or do this as root.

And for the latter, if over NFS, they must be mounted with root as root.
pareshan
Regular Advisor

Re: delete everything and check whether everything is deleted or not

Thaks alot everybody. I really appreciate you guys help. I have done using what Dennis said and its working. Bill the way you said is also right but I found it easier to use the other one.

Thanks again
pareshan
Regular Advisor

Re: delete everything and check whether everything is deleted or not

Everything is working fine the way i wanted. Thats why I am closing it.