- Find command Exclude or Ignore Files (e.g. Ignore All Hidden .dot Files )
- Find command exclude or ignore files syntax
- Examples: find command and logical operators
- Understanding find command operators
- How do I ignore hidden .dot files while searching for files?
- Say hello to -path option
- Exclude a directory or multiple directories while using find command
- Method 1 : Using the option “-prune -o”
- Method 2 : Using “! -path”
- Method 3 : Simple 🙂
- Excluding multiples directories
- Find Command Exclude Directories From Search Pattern
- Linux find directory exclude
- Как исключить каталог в find. команда
- 30 ответов
Find command Exclude or Ignore Files (e.g. Ignore All Hidden .dot Files )
Find command exclude or ignore files syntax
The syntax is as follows:
Examples: find command and logical operators
Find any file whose name ends with either ‘c’ or ‘asm’, enter:
$ find . -type f \( -iname «*.c» -or -iname «*.asm» \)
In this example, find all *.conf and (.txt) text files in the /etc/ directory:
$ find . -type f \( -name «*.conf» -or -name «*.txt» \) -print
Fig.01: Linux find command exclude files command
Understanding find command operators
Operators build a complex expression from tests and actions. The operators are, in order of decreasing precedence:
( expr ) | Force precedence. True if expr is true |
expr -not expr ! expr | True if expr is false. In some shells, it is necessary to protect the ‘!’ from shell interpretation by quoting it. |
expr1 -and expr2 | expr2 is not evaluated if expr1 is false. |
expr1 -or expr2 | expr2 is not evaluated if expr1 is true. |
How do I ignore hidden .dot files while searching for files?
Find *.txt file but ignore hidden .txt file such as .vimrc or .data.txt file:
$ find . -type f \( -iname «*.txt» ! -iname «.*» \)
Find all .dot files but ignore .htaccess file:
$ find . -type f \( -iname «.*» ! -iname «.htaccess» \)
Say hello to -path option
This option return true if the pathname being examined matches pattern. For example, find all *.txt files in the current directory but exclude ./Movies/, ./Downloads/, and ./Music/ folders:
Источник
Exclude a directory or multiple directories while using find command
Table of Contents
Is it possible to exclude a directory with find command? Exclude directories while doing running find command?
Yep, the command FIND has wide range of options to search what you actually looking for. I have already listed different switches and its usages with examples. Here we go for excluding some directories from our find job.
In some cases, we have to exclude some directories from our search pattern to improve the search speed or efficiency. If the server has a lot of directories and we are sure about that the file / directory that we are searching is not in some directories, we can directly exclude those to improve the performance. The result will be faster as compared to the full search.
There are different ways to exclude a directory or multiple directories in FIND command. Here I’m listing some methods!
To explain this, I created the following directories and files:
- “cry“, “bit” and “com” directories.
- ” findme “: The test file in all directories.
Lets see the output:
Method 1 : Using the option “-prune -o”
We can exclude directories by using the help of “path“, “prune“, “o” and “print” switches with find command.
See the example:
The directory “bit” will be excluded from the find search!
Method 2 : Using “! -path”
This is not much complicated compared to first method. See the example pasted below:
Method 3 : Simple 🙂
Yes, it’s very simple. We can ignore the location by using inverse grep “grep -v” option.
See the example:
Excluding multiples directories
Similar way we can exclude multiple directories also. See the sample outputs:
Источник
Find Command Exclude Directories From Search Pattern
H ow do I exclude certain directories while using the find command under UNIX or Linux operating systems?
You can use the find command as follows to find all directories except tmp directory:
Find all directories except tmp and cache:
The -prune option make sure that you do not descend into directory:
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
You can find all *.pl find except in tmp and root directory, enter:
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Category | List of Unix and Linux commands |
---|---|
Documentation | help • mandb • man • pinfo |
Disk space analyzers | df • duf • ncdu • pydf |
File Management | cat • cp • less • mkdir • more • tree |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Linux Desktop Apps | Skype • Spotify • VLC 3 |
Modern utilities | bat • exa |
Network Utilities | NetHogs • dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • glances • gtop • jobs • killall • kill • pidof • pstree • pwdx • time • vtop |
Searching | ag • grep • whereis • which |
Shell builtins | compgen • echo • printf |
Text processing | cut • rev |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
Comments on this entry are closed.
find / \( ! -name tmp \) -o \( ! -name root -prune \) -name “*.pl” -print
it’s also displaying the files in tmp directory ?? this isn’t working
using findutils.x86_64 1:4.2.27-6.el5 version
On my Ubuntu 11 this command will search for all “pl” files in the entire / dir but will not descend in /tmp:
find . -path ./tmp -prune -o -iname “**.pl” -print
To exclude multiple directories, the option to use is -a, which is AND operation; not -o as listed in the above article.
Therefore, to find all directories except tmp and cache
find /path/to/dest -type d \( ! -name tmp \) -a \( ! -name cache \) -print
we have the below directory structure:
/secure/data/bus/PREP_MDATA/preserve
/secure/data/bus/PREP_TDATA/preserve
/secure/data/bus/PREP_QDATA/preserve
/secure/data/bus/PREP_RDATA/preserve
I want to exclude the below 2 directories from my search but show up the other 2
/secure/data/bus/PREP_TDATA/preserve
/secure/data/bus/PREP_QDATA/preserve
How do I do that using the above stated commands.
Thanks for the help
I’m just trying to exclude ONE directory, and the code doesn’t work. All directories are printed.
Joe,
Try this
This will list a non case sensitive list of all files with some phrase but will exlude some other folder with some non case sensitive phrase in it.
Remember if you just want it to list all files you can use * or *.ext for all files with .ext etc.
It seems counter intuitive to use the -o flag but it works here on csh
The dot right after the find command signifies THIS directory or whatever directory you are in. You can always replace that with another directory path.
find . -type f -iname “insert_file_names_you_want_listed_here” -print -o -type d -iname “insert_folder_name_you_dont_want_here” -prune
Chris, thanks a lot, due to your post I was able to search for files containing “somephrase” in directory and its subdirs excluding some speciffic subdirectories with this command:
find /path/to/dir/ -exec grep -q somephrase <> \; -print -o -type d -wholename “/path/to/dir/speciffic/dir/*” -prune
hopefully somebody will find it usefull
find . \( -name results -prune \) -o \( -name typ_testout -prune \) -o \( -name obj-testgen -prune \) -o \( -name obj-sim -prune \) -o -type f -exec grep -w abf <> \; -print
I was trying to find the list of files having the string “abf”. But I wanted to exclude search results in the “results”, “typ_testout”, “obj-testgen”,”obj-sim” directories. So I used the above command and it worked perfectly fine for me. The secret is the “-o” option after each expression. So the find command matches against multiple expressions.
Thanks for the article, using it and the man page, here is a version using wholename to ‘prune’ absolute paths:
find all directories except tmp directory:
find /path/to/dest -maxdepth 2 -type d \( ! -name tmp \) -print
how about show only the directory with no subtmp?
find . -name “*.mp3” -and -not -path “*Trash*”
will find all mp3 files and exclude any folder containing the letters “Trash”
+++ thank you, been looking to exclude my .svn folder when using find — this did the trick: find . -type f -and -not -path “*.svn*” -print
The real general problem is that of excluding certain directories by name, *AND ALSO AVOIDING TRAVERSING THEM* because they may contain *HUGE* subtrees that would take ages to scan, which is *PRECISELY* why we want to exclude them.
Additionally, the directories to be excluded may be located deeper than immediately below the start directory, i.e. if the intention is to exclude directories namet _thumb, then *ALL* of the following should be excluded:
./_thumb
./customer1/_thumb
./customer2/website4/_thumb
The answers above either don’t work at all, fail to avoid traversing the excluded directories, or would only exclude the first line.
Is the solution satisfying *ALL* the above requirements even possible with find?
Due to some bugs and versions of find, some works and not.
Though a simle find with grep will do.
Find the files and directories with ganglia on it, except for the directories with name Downloads.
sudo find / -iname “*ganglia*” | egrep -vi “downloads”
Or you can exclude specific directory like, find files or directories with ganglia except in the directory /home/simpleboy/Downloads
sudo find / -iname “*ganglia*” | egrep -v “\/home\/simpleboy\/Downloads”
Thanks More power nixCraft!
find / \( -path /exclude-folder1 -o -path /exclude-folder2 \) -prune -or -iname ‘*look-up*’ -exec ls -ld <> \;
Источник
Linux find directory exclude
6. Find all the files except the ones under the temp directory. Also print the temp directories if present:
The only difference here is the print statement being present in the first half as well.
7. Find all the .c files except the ones present in the C directory:
The 1st part prunes out the C directories. In the second part, all the .c files are found and printed except the ones present in C.
8. Find all the .c files except the ones present in the C and temp directory:
To specify multiple directories with the -name option, -o should be used as an OR condition.
9. Find all files modified in the last one day except the ones present in the temp directory:
Usage of mtime makes find to search for files modified in the last day alone.
10. Find only regular files modified in the last one day except the ones present in the temp directory:
Using the -type f option, find will find only the regular files alone.
11. Find all files whose permission is 644 except the ones present in the temp directory:
-perm option in find allows to find files with specific permissions. permission 644 indicates files with permission rw-r—r—.
12. Same using the wholename option and prune to exclude directory:
13. Using exec and prune to exclude directory in-place of name:
One more way. Using the exec, a condition can be put to check whether the current file is «temp». If so, prune it. ‘<>‘ is the file found by the find command.
14. Using inum and prune to exclude directory in-place of name option:
Same, but using the inode number of the temp directory. inode number is specified using the inum option.
15. Find the list of all .c files except the ones present in the C directory without using prune:
-path option is like the -wholename option. It is used to specify a specific path to search. In this case, ‘! -path » tells to exclude this path alone. Since the specific path has been excluded in this way, the prune is not needed at all.
Источник
Как исключить каталог в find. команда
Я пытаюсь запустить find команда для всех файлов JavaScript, но как исключить определенный каталог?
здесь find код, который мы используем.
30 ответов
используйте переключатель чернослива, например, если вы хотите исключить
Если -prune не работает для вас, это:
я нахожу, что о следующем проще рассуждать, чем о других предлагаемых решениях:
это происходит из фактического случая использования, когда мне нужно было вызвать YUI-compressor на некоторых файлах, сгенерированных wintersmith, но оставить другие файлы, которые должны быть отправлены как есть.
внутри \( и \) — Это выражение, которое будет соответствовать ровно build/external (это не если ты find ./build , например, — вам нужно чтобы изменить его на ./build/external в таком случае), и будет, на успех,избегайте прохождения чего-либо ниже. Затем это группируется как одно выражение с экранированной скобкой и префиксом -not что будет find пропустить все, что соответствовало этому выражению.
можно спросить, если добавить -not не сделает все остальные файлы скрыты -prune появляется снова, и ответ-нет. Путь -prune работает, что все, что, как только это будет достигнуто, файлы ниже этого каталога постоянно игнорируются.
, что также легко расширить, чтобы добавить дополнительные исключения. Например:
здесь явно есть некоторая путаница относительно того, какой предпочтительный синтаксис для пропуска каталога должен быть.
мнение GNU
мышление
-prune остановка find от спуска в каталог. Просто укажите -not -path все равно спустится в пропустить, а -not -path будет false всякий раз, когда find проверяет каждый файл.
проблемы с -prune
-prune делает то, что он предназначен для, но все еще некоторые вещи, которые вы должны заботиться при использовании его.
find печать обрезанного каталога.
- правда это предполагаемое поведение, оно просто не опускается в него. Чтобы избежать печати каталога в целом, используйте синтаксис, который логически опускает.
-prune работает только с -print и другие действия.
- НЕ ТАК. -prune работает с любым действием, за исключением -delete . почему он не работает с delete? на -delete чтобы работать, find необходимо пройти каталог в порядке DFS, так как -delete сначала удалить листья, затем родители, листьев и т. д. Но для указания -prune смысл, find необходимо попасть в каталог и остановить его спуск, что явно не имеет смысла с -depth или -delete on.
производительность
я установил простой тест из трех ответов top upvoted на этот вопрос (заменен -print С -exec bash -c ‘echo ‘ <> \; показать другой пример действия). Результаты ниже
вывод
и f10bit это и синтаксис Даниэля С. собрала потребовалось 10-25ms для запуска в среднем. GetFree-х, который не использует -prune , взял 865ms. Итак, да, это довольно экстремальный пример, но если вы заботитесь о времени выполнения и делаете что-то удаленно интенсивное, вы должны использовать -prune .
Примечание синтаксис Даниэля С. собрала выполнил лучшее из двух -prune синтаксисы; но я сильно подозреваю, что это результат некоторого кэширования при переключении порядок, в котором они выполнялись, приводил к противоположному результату, в то время как версия без чернослива всегда была самой медленной.
Источник