This find command could have got me fired


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting This find command could have got me fired
# 1  
Old 08-21-2014
This find command could have got me fired

Oracle Linux 6.4/Bash shell

I am not an expert in find command

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.

Code:
find / "*.dmp" -mtime +60 -exec rm {} \+ 2>/dev/null

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 .

Code:
$ pwd
/tmp
$
$
$ touch xyz.txt
$
$ find /tmp "*.txt" -mtime +60 -exec ls -larth {} \+ 2>/dev/null

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

Last edited by John K; 08-23-2014 at 07:22 AM..
# 2  
Old 08-21-2014
That is why I always try with -print before going on an rm rampage Smilie 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:
# 3  
Old 08-21-2014
Did this 'friend' keep your job? Um, I mean 'their' job. Smilie

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 Smilie

Well, we learn from our mistakes. We did recover and I kept my job Smilie



Robin
These 2 Users Gave Thanks to rbatte1 For This Post:
# 4  
Old 08-22-2014
Yes.
Code:
find <SearchstartLocation> -name <pattern>

is the preferred syntax.

Alternatively you could use
Code:
find /path/pattern

It seems to search only within the specified directory (depth=1 ). So it is safe too

Example

Code:
# touch /u05/xyz.fooo
#
#
# find /u05/*.fooo -print
/u05/xyz.fooo
#
#

The below search which starts in / directory doesn't find the file xyz.fooo as it is within /u05 directory

Code:
# find /*.fooo -print
find: `/*.fooo': No such file or directory
#
#
#
# touch /abc.fooo
#
# find /*.fooo -print
/abc.fooo

# 5  
Old 08-22-2014
Quote:
Originally Posted by omega3
Yes.
Code:
find <SearchstartLocation> -name <pattern>

is the preferred syntax.

Alternatively you could use
Code:
find /path/pattern

It seems to search only within the specified directory (depth=1 ). So it is safe too

Example

Code:
# touch /u05/xyz.fooo
#
#
# find /u05/*.fooo -print
/u05/xyz.fooo
#
#

The below search which starts in / directory doesn't find the file xyz.fooo as it is within /u05 directory

Code:
# find /*.fooo -print
find: `/*.fooo': No such file or directory
#
#
#
# touch /abc.fooo
#
# find /*.fooo -print
/abc.fooo

Not really... The standard synopsis for the find utility is:
Code:
find [−H|−L] path... [operand_expression...]

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:
Code:
find /u05/*.fooo -print

the shell expands /u05/*.fooo to a list of matching files before find starts running. If you run the command:
Code:
find /u05 -name '*.fooo' -print

the find utility is expanding the *.fooo looking for matching files in and under /u05 and (in your example) prints:
Code:
/u05/xyz.fooo

Note that a common mistake for newbies is to invoke the above command without the quotes:
Code:
find /u05 -name *.fooo -print

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:
Code:
find /u05 -name abc.fooo -print

and /u05 contains xyz.fooo; but no file named abc.fooo.

And the command:
Code:
find /tmp /u05 "$HOME" -name '*.fooo'

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:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Is it possible to find the seek rate of the find command in Solaris?

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)
Discussion started by: bstring
1 Replies

2. UNIX for Dummies Questions & Answers

if statement in shell is not getting fired?

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)
Discussion started by: abhi_123
0 Replies

3. Shell Programming and Scripting

Find multiple string in one file using find command

Hi, I want find multiple string in one file using find coomand. And keeping it in one variable.grep is not working. (5 Replies)
Discussion started by: vivek1489
5 Replies

4. Shell Programming and Scripting

How to use grep & find command to find references to a particular file

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)
Discussion started by: Gangam
2 Replies

5. Linux

Simplified find command to find multiple file types

Hi, I'm using the following command to find the multiple requierd file types and its working fine find . -name "*.pl" -o -name "*.pm" -o -name "*.sql" -o -name "*.so" -o -name "*.sh" -o -name "*.java" -o -name "*.class" -o -name "*.jar" -o -name "*.gz" -o -name "*.Z" -type f Though... (2 Replies)
Discussion started by: vickramshetty
2 Replies

6. Shell Programming and Scripting

find: No match due to find command being argument

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)
Discussion started by: mst3k4l
2 Replies

7. UNIX for Dummies Questions & Answers

how to find a file named vijay in a directory using find command

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)
Discussion started by: amirthraj_12
6 Replies

8. UNIX for Advanced & Expert Users

Read the entire output fired by ps command

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)
Discussion started by: vinithepoo
5 Replies

9. Shell Programming and Scripting

Little bit weired : Find files in UNIX w/o using find or where command

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)
Discussion started by: jatin.jain
10 Replies

10. Shell Programming and Scripting

command find returned bash: /usr/bin/find: Argument list too long

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)
Discussion started by: yacsil
1 Replies
Login or Register to Ask a Question