Find: Difference between revisions

From Leo's Notes
This page was last edited on 4 May 2013, at 20:39.
Line 15: Line 15:
== Find by filename ==
== Find by filename ==
Basic usage:
Basic usage:
  find . '''-name''' <term>
  find . -['''i''' - case insensitive]name <term>


You may want to use '''<code>-iname</code>''' for case insensitivity.
The term you pass in must match the entire file name. You can use '''*''' as a wild card.
 
For regex matching, use -regex. The default regex used by find is emacs-regex. To define something else (like posix), use -regextype.
 
To find a file named exactly 'confession.txt':
find . -name confession.txt -type f


To find a directory named 'backup' or 'Backup':
To find a directory named 'backup' or 'Backup':
  find . -iname backup -type d
  find . -iname backup -type d
To find a file with the format NNN-NNNN.txt where N is an integer:
find . -regextype posix-egrep -regex ".?\/?[0-9]{3}-[0-9]{4}.txt"


== Find by time ==
== Find by time ==

Revision as of 20:39, 4 May 2013

find is one of those commands that can be quite arcane. Hopefully this article should clear things up with a brief list of basic uses.

One of the nice things with find is that you can chain multiple things together.

Find a specific type

Basic usage:

find . -type [f - file|d - directory|l - links]

To find only normal files:

find . -type f

To find both files and directories:

find . -type f -o -type d

Find by filename

Basic usage:

find . -[i - case insensitive]name <term>

The term you pass in must match the entire file name. You can use * as a wild card.

For regex matching, use -regex. The default regex used by find is emacs-regex. To define something else (like posix), use -regextype.

To find a file named exactly 'confession.txt':

find . -name confession.txt -type f

To find a directory named 'backup' or 'Backup':

find . -iname backup -type d

To find a file with the format NNN-NNNN.txt where N is an integer:

find . -regextype posix-egrep -regex ".?\/?[0-9]{3}-[0-9]{4}.txt"

Find by time

Basic usage:

find . -[a - accessed|c - created|m - modified][time|min] 

where time is in days when used with time, or minutes when used with min.

To find files modified within 3 minutes ago:

find . -mmin -3

To find files created within 1 day ago:

find . -cmin -1

Do things on match

Basic usage:

find . -exec <command> {} \;

The {} is substituted with the matching filename. The \; at the end denotes the end of the command passed to -exec.

To move all .o files to /tmp/objects:

find . -iname "*.o" -exec mv {} /tmp/{} \;

/tmp/{} can be simplified to /tmp, but this shows you can use {} more than once.

To convert all .php files into UTF-8 files

find . -iname "*.php" -exec sh -c 'iconv -f cp1252 -t utf-8 {} > {}.utf8' \;
for i in `(find . -name "*.utf8")`; do mv $i ${i/.utf8/}; done