1. Overview
As Linux users, we frequently perform various operations on file systems. For example, one of the common operations is searching files. This simple task becomes time-consuming if the system has a large number of files. However, we can make it efficient by excluding certain directories from the search path.
In this tutorial, we’ll discuss the various ways to achieve this with the find command.
2. Using the -prune Option
Let’s create a set of files and directories to use as an example:
$ mkdir mp3 jpeg txt
$ touch mp3/1.mp3 mp3/2.mp3 mp3/3.mp3
$ touch jpeg/1.jpeg jpeg/2.jpeg jpeg/3.jpeg
$ touch txt/1.txt txt/2.txt txt/3.txt
Let’s now look at the directory tree we just created:
$ tree
.
├── jpeg
│ ├── 1.jpeg
│ ├── 2.jpeg
│ └── 3.jpeg
├── mp3
│ ├── 1.mp3
│ ├── 2.mp3
│ └── 3.mp3
└── txt
├── 1.txt
├── 2.txt
└── 3.txt
We can use the -prune option of the find command to exclude a certain path:
$ find . -path ./jpeg -prune -o -print
.
./txt
./txt/3.txt
./txt/2.txt
./txt/1.txt
./mp3
./mp3/1.mp3
./mp3/2.mp3
./mp3/3.mp3
In the above example, the find command performs a search in all directories except jpeg.
We can also exclude multiple paths using the -o operator:
$ find . \( -path ./jpeg -prune -o -path ./mp3 -prune \) -o -print
.
./txt
./txt/3.txt
./txt/2.txt
./txt/1.txt
In the above example, we are using the -o operator to exclude jpeg and mp3 directories.
3. Using the -not Operator
The find command also provides the -not operator. We can use it to exclude a directory from a search path:
$ find . -type f -not -path '*/mp3/*'
./jpeg/3.jpeg
./jpeg/2.jpeg
./jpeg/1.jpeg
./txt/3.txt
./txt/2.txt
./txt/1.txt
In the above example, we’re using the -not operator to exclude the mp3 directory from our search path.
4. Using the ! Operator
One more way to exclude a directory is to use the ! operator with the find command:
$ find . -type f ! -path '*/txt/*'
./jpeg/3.jpeg
./jpeg/2.jpeg
./jpeg/1.jpeg
./mp3/1.mp3
./mp3/2.mp3
./mp3/3.mp3
In the above example, we’re using the ! operator to exclude the txt directory.
5. Conclusion
In this tutorial, we discussed three practical examples to exclude directories from the find command’s search path. We can use these commands in day-to-day life while working with the Linux system.