How do I exclude a directory when using `find`?

 

When using the find command in Unix-like systems, you can exclude specific directories from the search results using the -prune option. This option prevents find from descending into a directory that matches the specified criteria. Here's an example:

Suppose you want to search for all .txt files in a directory but exclude the exclude_dir directory from the search. Here's how you would do it:

bash
find /path/to/search -type d -name 'exclude_dir' -prune -o -type f -name '*.txt' -print

Explanation of the command:

  1. find /path/to/search: Specifies the starting directory for the search.
  2. -type d -name 'exclude_dir' -prune: This part identifies the exclude_dir directory and prunes it from the search. -prune prevents find from descending into this directory.
  3. -o: Acts as a logical OR, separating the pruned directory condition from the desired file search condition.
  4. -type f -name '*.txt' -print: This part searches for all .txt files (-type f specifies files) and prints their paths.

Replace /path/to/search with the actual directory you want to start the search from and adjust 'exclude_dir' to the name of the directory you want to exclude.

Here's an example with sample directory structure:

Suppose you have the following directory structure:

lua
/path/to/search |-- exclude_dir | |-- excluded.txt | |-- included.txt |-- subdirectory | |-- included.txt | |-- excluded.txt |-- another_sub |-- included.txt |-- excluded.txt

If you want to search for all included.txt files but exclude the exclude_dir directory, you would run:

bash
find /path/to/search -type d -name 'exclude_dir' -prune -o -type f -name 'included.txt' -print

This would output:

bash
/path/to/search/included.txt /path/to/search/subdirectory/included.txt /path/to/search/another_sub/included.txt

Notice that the files under the exclude_dir directory are excluded from the results.

Comments