Find files in directory and its subdirectory


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find files in directory and its subdirectory
# 1  
Old 01-23-2008
Find files in directory and its subdirectory

I am writing a script which reads a file line by line and then assigns it to a variable like this 1090373422_4028715212.jpg. I have images with file name of this format in some other directory. In my script I want to assign variable with this file name and then find this filename in some other directory and delete it.

Something like: find some/path filename rm filename

I know it can be done with find command but I don't know the correct syntax.

I would really appreciate if someone can help me with this.

Thanks.
# 2  
Old 01-23-2008
How do find file in directory or subdirectory ????
# 3  
Old 01-23-2008
Quote:
Originally Posted by jyotib
How do find file in directory or subdirectory ????
Maybe You could try something like this. I am sure there are more efficient ways to do it, especially when there are lots of files and deep structures. But it can give You an idea of how it can be done. This works in Bash. Probably in most other shells as well.

Let's say You have a file with a list of names:
Code:
lakris@Lakrix:~/Projects/scripts$ cat listofnames.txt
resumed-transactions.txt
session.properties

With the command line below You let the operation "while read" (the < listofnames.txt at the end means that that's where the input comes from) take each line, and use it as an argument to the program find.

When the program find finds it in or below ~(the ~ means Your home directory, replace it with something else, /share/pics or whatever), You use that result and pass it as an argument to the program xargs, which then performs an operation on it.

In this case I use ls (list or dir) since it is non-destructive, just to try it out and it will give me a confirmation of which files will be affected. I can replace it with rm when I think I am certain that it will work.

So:

Code:
lakris@Lakrix:~/Projects/scripts$ while read filename;do find ~ -type f 
-name "$filename" -print0 |xargs ls;done < listofnames.txt
/home/lakris/bin/resumed-transactions.txt
/home/lakris/.anjuta/session.properties
lakris@Lakrix:~/Projects/scripts$

Could that work for You?

/Lakris
# 4  
Old 01-23-2008
Code:
find <dir> -name <shell-regex-pattern> -exec <command> {} \;
find some/dir -name "*.jpg" -exec ls -l {} \;

each result of the find would end up in "{}". so "ls -l" would be executed for each.
is this what you want?

Last edited by m9dhatter; 01-23-2008 at 10:57 PM..
# 5  
Old 01-23-2008
Well, if he hasn't fallen asleep... or cursed his lack of taking hourly backups...

-exec would be better than how I used xargs in my example. I was thinking of the possibility of long "lists" in the result but it wouldn't apply to how I wrote it. But I think the OP wants to treat a list of of items given, so maybe:

Code:
while read filename;do find ~ -type f -name "$filename" -print0 -exec ls {} \; ;done < listofnames.txt
and when You are sure, replace ls with rm...

would be better? Using rm -rf would delete all files (and directories) matching the pattern given in the constant string (DON'T RUN THAT COMMAND!) and I don't think that is what he wanted.

/Lakris
# 6  
Old 01-23-2008
yep. if its a list, that would better suit his query. Smilie I've also edited the previous post because I noticed it was kinda dangerous for beginners... sorry about that.
# 7  
Old 01-23-2008
When doing bulk removes, I do it in stages: generate the list, examine, then do the remove. Then I can check that I'm aiming for the correct foot One Last Time(tm) before shooting.

In the case above where the user wants to transform the file names before removing, sed is your friend. Using the ':' character instead of the traditional '/' for the 's' command allows me to avoid tiresome escaping in the sed command.

Code:
find /path -name '*yack*' -exec echo rm {} \; >/tmp/flist
sed 's:/some/path:/another/dir:' </tmp/flist >/tmp/doit.sh
vim /tmp/doit.sh       # aim carefully
bash -x /tmp/doit.sh   # ka-blam

--
Qman
printf("Hello unix.com forums (first post!)\n");
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Remove all files except the subdirectory(without pattern) in a directory

I used rm * and it deleted the files in the directory but gives and error message for unsuccessful subdirectory deletion. "rm: cannot remove 'DirectoryName': Is a directory" I dont want to explicitly get the above error. What are the modifications I have to do in the rm command? (3 Replies)
Discussion started by: duplicate
3 Replies

2. Shell Programming and Scripting

Globbling files in the direct subdirectory of the current directory

I want to list files that end with .c in the direct subdirectory of the current directory. I have tried the following command: find ./ -mindepth 2 -maxdepth 2 -name "*.c" Is that right? Or is there any easier way to handle that problem? Another problem is that I want to grep in a file to find... (5 Replies)
Discussion started by: Ray Sun
5 Replies

3. Shell Programming and Scripting

Changing ownership of a directory, subdirectory and files as same as in another server

accidentally i have changed ownership of a directory,subdirectory and files wil below command. I want to the change ownership back as same as in same directory on another server. How can i do it? chown -R user:group /u01 is there any simple script? it is really an urgent need.. (2 Replies)
Discussion started by: johnveslin
2 Replies

4. Solaris

Display the number of files in a directory and recursively in each subdirectory

Display the number of files in a directory and recursively in each subdirectory To look something like below, for example /var 35 /var/tmp 56 /var/adm 46Any ideas how can we do this? Got a sun cluser global mount point which takes ages to mount everytime, need to understand... (5 Replies)
Discussion started by: jakerock
5 Replies

5. Solaris

Display the number of files in a directory and recursively in each subdirectory

Display the number of files in a directory and recursively in each subdirectory To look something like below, for example /var 35 /var/tmp 56 /var/adm 46 Any ideas how can we do this? :wall: (1 Reply)
Discussion started by: jakerock
1 Replies

6. Shell Programming and Scripting

Move all files not in a directory into a subdirectory named for each given file

Hi Everyone! Looking for some help with a script that will take all files in any given root folder (which are not already in a folder) and put them into separate folders with the name of each given file. Any ideas? Thank you! (1 Reply)
Discussion started by: DanTheMan
1 Replies

7. UNIX for Dummies Questions & Answers

How to Find files in subdirectory?

I am trying to find all DAT files in a subdirectory named IN. I do not know the entire path. For example: /stage/<?>/<?>/IN/file.DAT I am using the find command without success: find /stage -name IN -a -name '*.DAT' -print What is the correct logic and syntax? Thank you for the help. (5 Replies)
Discussion started by: TwinGT
5 Replies

8. Shell Programming and Scripting

How can i find a word inside a file from a directory and it's subdirectory ?

Suppose i have a word "mail". I have to search this word in all files inside a directory and it's sub-directories. It will also search in all hidden directory and sub-directories. If it finds this word in any file it will list that file. How can i do this with perl/ruby/awk/sed/bash or... (9 Replies)
Discussion started by: cola
9 Replies

9. UNIX for Dummies Questions & Answers

How to move all files in a directory and subdirectory?

I'm trying to organize my MB Pro by moving all my jpeg files to a single folder from the desktop. There are some on the desktop that are not in any folder. I was at the command line and typed mv *.jpg "Jpeg files" but it only moved the files that were on the desktop, not any of the ones that... (3 Replies)
Discussion started by: Straitsfan
3 Replies

10. Shell Programming and Scripting

Find command, -name by directory and subdirectory?

Hi All, I'm trying to use the find command to return matches for a directory and file. For example, given the following directories: /one/two/three/file1.txt /one/three/two/file1.txt /one/four/two/three/file1.txt I'm expecting the following to be returned: ... (16 Replies)
Discussion started by: makodarear
16 Replies
Login or Register to Ask a Question