Find linux except directory

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:

Источник

Find linux except directory

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—.

Читайте также:  Red hat linux �������� �������

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.

Источник

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 в Linux – мощный инструмент сисадмина

Иногда критически важно быстро найти нужный файл или информацию в системе. Порой можно ограничиться стандартами функциями поиска, которыми сейчас обладает любой файловый менеджер, но с возможностями терминала им не сравниться.

Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:

  • Дате добавления.
  • Содержимому.
  • Регулярным выражениям.

Данная команда будет очень полезна системным администраторам для:

  • Управления дисковым пространством.
  • Бэкапа.
  • Различных операций с файлами.

Команда find в Linux производит поиск файлов и папок на основе заданных вами критериев и позволяет выполнять действия с результатами поиска.

Синтаксис команды find:

  • directory-to-search (каталог поиска) – это отправной каталог, с которой find начинает поиск файлов по всем подкаталогам, которые находятся внутри. Если не указать путь, тогда поиск начнется в текущем каталоге;
  • criteria (критерий) – критерий, по которым нужно искать файлы;
  • action (действие) – что делать с каждым найденным файлом, соответствующим критериям.
Читайте также:  Forticlient vpn linux ipsec

Поиск по имени

Следующая команда ищет файл s.txt в текущем каталоге:

  • . (точка) – файл относится к нынешнему каталогу
  • -name – критерии по которым осуществляется поиск. В данном случае поиск по названию файла.

В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.

Для поиска всех изображений c расширением .png нужно использовать шаблон подстановки *.png:

Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:

Если выдает слишком много ошибок в отказе разрешения, тогда можно добавить в конец команды – 2> /dev/null. Таким образом сообщения об ошибках будут перенаправляться по пути dev/null, что обеспечит более чистую выдачу.

Поиск по типу файла

Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:

  • f – простые файлы;
  • d – каталоги;
  • l – символические ссылки;
  • b – блочные устройства (dev);
  • c – символьные устройства (dev);
  • p – именованные каналы;
  • s – сокеты;

Например, указав критерий -type d будут перечислены только каталоги:

Поиск по размеру файла

Допустим, что вам необходимо найти все большие файлы. Для таких ситуаций подойдет критерий -size.

  • «+» — Поиск файлов больше заданного размера
  • «-» — Поиск файлов меньше заданного размера
  • Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.

В данном случае поиск выведет все файлы более 1 Гб (+1G).

Единицы измерения файлов:

Поиск пустых файлов и каталогов

Критерий -empty позволяет найти пустые файлы и каталоги.

Поиск времени изменения

Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:

Таким образом можно найти все файлы в текущем каталоге, которые были созданы или изменены в течение часа (менее 60 минут).

Для поиска файлов, которые наоборот были изменены в любое время кроме последнего часа необходимо использовать +60.

Поиск по времени доступа

Критерий -atime позволяет искать файлы по времени последнего доступа.

Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней).

Поиск по имени пользователя

Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:

Таким образом можно найти все файлы пользователя tisha в каталоге home, а 2>/dev/null сделает выдачу чистой без ошибок в отказе доступа.

Поиск по набору разрешений

Критерий -perm – ищет файлы по определенному набору разрешений.

Поиск файлов с разрешениями 777.

Операторы

Для объединения нескольких критериев в одну команду поиска можно применять операторы:

Например, чтобы найти файлы размером более 1 Гбайта пользователя tisha необходимо ввести следующую команду:

Если файлы могут принадлежать не только пользователю tisha, но и пользователю pokeristo, а также быть размером более 1 Гбайта.

Перед скобками нужно поставить обратный слеш «\».

Действия

К команде find можно добавить действия, которые будут произведены с результатами поиска.

  • -delete — Удаляет соответствующие результатам поиска файлы
  • -ls — Вывод более подробных результатов поиска с:
    • Размерами файлов.
    • Количеством inode.
  • -print Стоит по умолчанию, если не указать другое действие. Показывает полный путь к найденным файлам.
  • -exec Выполняет указанную команду в каждой строке результатов поиска.

-delete

Полезен, когда необходимо найти и удалить все пустые файлы, например:

Перед удалением лучше лишний раз себя подстраховать. Для этого можно запустить команду с действием по умолчанию -print.

Данное действие является особенным и позволяет выполнить команду по вашему усмотрению в результатах поиска.

  • command – это команда, которую вы желаете выполнить для результатов поиска. Например:
    • rm
    • mv
    • cp
  • <> – является результатами поиска.
  • \; — Команда заканчивается точкой с запятой после обратного слеша.
Читайте также:  Windows copy linked files

С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:

Другой пример использования действия -exec:

Таким образом можно скопировать все .jpg изображения в каталог backups/fotos

Заключение

Команду find можно использовать для поиска:

  • Файлов по имени.
  • Дате последнего доступа.
  • Дате последнего изменения.
  • Имени пользователя (владельца файла).
  • Имени группы.
  • Размеру.
  • Разрешению.
  • Другим критериям.

С полученными результатами можно сразу выполнять различные действия, такие как:

  • Удаление.
  • Копирование.
  • Перемещение в другой каталог.

Команда find может сильно облегчить жизнь системному администратору, а лучший способ овладеть ей – больше практиковаться.

Источник

Как исключить каталог в 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 синтаксисы; но я сильно подозреваю, что это результат некоторого кэширования при переключении порядок, в котором они выполнялись, приводил к противоположному результату, в то время как версия без чернослива всегда была самой медленной.

Источник

Оцените статью