I wanted to delete all files with extension .dmp which are older than 60 days. So I executed rm command from within find as show below and it
deleted ALL THE FILES (even files without any extention) which the user had permission !!!!! Luckily this was a pre-production server.
Otherwise , this would have got me fired !! This is caused because I missed -name clause in the find command.
Reproducing the "issue" (my stupidity)
To be safe, in the below example, I am using ls command instead of rm and I using /tmp instead of / directory.
I am skipping -name clause in the find and the ls command will list all files from /tmp .
The above command does list all files which are older than 60 days in all the subdirectories in /tmp but it ignores "*.txt" and lists all
the files in /tmp
I wish find command just errored out when you skip -name clause rather that returning all the files. It is dangerous
That is why I always try with -print before going on an rm rampage And try as much as possible to give the complete path and not just / (yeah I know sometimes it's not possible). I have a friend that wiped a server with a find exec rm (stopped at /bin/rm obviously) but he was able to restore everything before monitoring noticed (don't ask).
Last edited by rbatte1; 08-21-2014 at 12:06 PM..
Reason: Added ICODE tags and emboldened commands
This User Gave Thanks to maverick72 For This Post:
Did this 'friend' keep your job? Um, I mean 'their' job.
On a destruction side, I've done this at a DR site and it doesn't work well enough the clean a server out usually. I did manage to do a big move once though. We had a scheduled job that was failing with permissions, so we changed it to run as root and the job worked fine. The problem was that it was to move everything from a relative path to an archive filesystem and being root, it moved /dev, /etc, ..... which made recovery rather difficult, especially when you cannot log on as there are no devices
Well, we learn from our mistakes. We did recover and I kept my job
Robin
These 2 Users Gave Thanks to rbatte1 For This Post:
Alternatively you could use
It seems to search only within the specified directory (depth=1 ). So it is safe too
Example
The below search which starts in / directory doesn't find the file xyz.fooo as it is within /u05 directory
Not really... The standard synopsis for the find utility is:
Find uses each given path operand as a root from which the operand-expression will be evaluated. If you name a regular file as a path operand, only that file will be evaluated (not the directory in which it resides). If you name a directory, it will evaluate that directory and all files in the file hierarchy rooted in that directory (unless part of the operand_expression limits the search.
When you invoke the command:
the shell expands /u05/*.fooo to a list of matching files before find starts running. If you run the command:
the find utility is expanding the *.fooo looking for matching files in and under /u05 and (in your example) prints:
Note that a common mistake for newbies is to invoke the above command without the quotes:
If you're sitting in / when you execute that command in your example, it won't print anything. The shell will expand the *.fooo to abc.fooo (which you created in /) so the arguments find will see will be:
and /u05 contains xyz.fooo; but no file named abc.fooo.
And the command:
with or without a -print primary, will print /u05/xyz.fooo and the names of any other files in /tmp and its subdirectories, /u05 and its subdirectories, and your home directory and its subdirectories with names that end with .fooo.
These 2 Users Gave Thanks to Don Cragun For This Post:
Hello,
I am running some performance based tests on Solaris, and I was wondering how fast the "seeking" rate of Solaris is, or how fast Solaris can get information about files with the "find" command. Does anyone know what 'find' command I could run to traverse through my system to see the rate... (1 Reply)
Hi,
When i am executing the shell script, i am unable to get the dates values substituted for variables &mtd and &wsd.
Please let me know where i am going wrong and please let me know how to get the values of these variables.
I have tried all methods but the if condition is getting fired twice... (0 Replies)
Hi all ,
I'm new to unix
I have a checked project , there exists a file called xxx.config .
now my task is to find all the files in the checked out project which references to this xxx.config file.
how do i use grep or find command . (2 Replies)
I am using csh and getting the error "find: No match." but I cannot figure out why. What I am trying to do is set the find command to a variable and then execute the variable as a command. I ran it through a debugger and it looks like $FIND is getting set but the find command can not actually be... (2 Replies)
I need to find whether there is a file named vijay is there or not in folder named "opt" .I tried "ls *|grep vijay" but it showed permission problem.
so i need to use find command (6 Replies)
Actually I want to display the entire output fired by ps command. My output gets trucated after 80 chars.
Thus, i am not able to see the entire command running when i give a ps -eaf ....
Does anyone know how do i display the entire output fired by ps command .. (i.e the command along with... (5 Replies)
Yes , I have to find a file in unix without using any find or where commands.Any pointers for the same would be very helpful as i am beginner in shell scritping and need a solution for the same.
Thanks in advance.
Regards
Jatin Jain (10 Replies)
Hello,
I create a file touch 1201093003 fichcomp
and inside a repertory (which hava a lot of files) I want to list all files created before this file :
find *.* \! -maxdepth 1 - newer fichcomp but this command returned bash: /usr/bin/find: Argument list too long
but i make a filter all... (1 Reply)