2 основных способа:

  • locate
  • find

1. Locate

Locate — самый быстрый способ, т.к. данные ищутся не на диске, а в базе данных /etc/updatedb.conf. База данных АВТОМАТИЧЕСКИ ОБНОВЛЯЕТСЯ РАЗ В ДЕНЬ. Для того, чтобы обновить базу принудительно:

sudo updatedb

locate: ФОРМАТ КОМАНДЫ

locate option string-to-find

OPTIONS:

  • «-i» — case insensitive

2. Find

find: ФОРМАТ КОМАНДЫ

find -[HLP][path-to-file-or-directory][keys][expression]

Простейшая команда find без ключей отобразит содержание текущей директории аналогично команде ls

!find | head -3
.
./8.Bash_ps.ipynb
./myfile-hardlink

Если аргумент path-to-file-or-directory опущен, то происходит поиск в текущей директории.

!find [0-2]*.ipynb # если expression ЕДИНСТВЕННЫЙ аргумент, то кавычки можно опустить.
0.Bash_Keyboard_Shortcuts.ipynb
1.Bash_links.ipynb
2.Bash_Wildcards.ipynb

Но !!!!

!find -name '[0-2]*.ipynb' # кавычки!!!
./2.Bash_Wildcards.ipynb
./0.Bash_Keyboard_Shortcuts.ipynb
./.ipynb_checkpoints/1.Bash_links-checkpoint.ipynb
./.ipynb_checkpoints/0.Bash_Keyboard_Shortcuts-checkpoint.ipynb
./.ipynb_checkpoints/2.Bash_Wildcards-checkpoint.ipynb
./1.Bash_links.ipynb

Обратите внимание, что результат поиска разный!

-[HLP] , нужно ли следовать символическим линкам? :

  • «-P» — no dereferense, default. «Видит» только линки.
  • «-L» — full dereference. Видит линкованные файлы на указанную глубину поиска.
  • «-H» — partial dereference. Видит линкованные файлы ТОЛЬКО в папках верхнего уровня, указанных в командной строке.
!find -L . -ls | grep softlink # с ключ -L задает следование линкам
829778    0 -rwxrwxrwx   3 sergey   sergey          0 Sep  2 20:56 ./myfile-softlink
!find . -ls | grep softlink # поиск по умолчанию отображает линки "как есть"
788629    0 lrwxrwxrwx   1 sergey   sergey          6 Sep  2 20:56 ./myfile-softlink -> myfile

EXPRESSIONS:

ВСЕ выражения указываются отдельно и разделяются пробелами с каждой стороны.

  • » » — пробел, булев «and», эквивалент «-a».
  • «-o» — булев «or»
  • «!» — булев «не», отрицание.
  • «–name ‘pattern’» — patern with shell WILDCARDS (*, ?, [ ]) (-name использует shell globbing )
    • «*» — один или более знаков
    • «?» — один знак
    • «[abc]» — один знак из «abc»:
      • поддерживает range [a-z]
      • поддерживает отрицание [^a-z], эквивалентно [!a-z]

Обратите внимание на особенности использовния ключа -name :

  • -regex pattern» — использовать ERE regexp pattern (иногда необходим дополнительный параметр -regextype posix-extended )
!find . -name '*.ipynb' | head -3 # нужны кавычки!!
./8.Bash_ps.ipynb
./.ipynb
./3.Bash_ls.ipynb
!find . -regex '.*\.ipynb' | head -3
./8.Bash_ps.ipynb
./.ipynb
./3.Bash_ls.ipynb
  • «±n» :
- " + " -- больше чем n  
- " - " -- меньше чем n  
- ""  -- без знака, точно n
  • » -atime ±n » — файлы открывались в последние n-ДНЕЙ
  • » -mtime ±n » — файл был изменен в последние n-ДНЕЙ
  • » -mmin ±n » — файл был изменен за последние n-МИНУТ
  • «–size ±n [ c | k | M | G ]» — файлы заданного размера, где размер указывается в:
    • «[c]» — знаках (количество букв, цифр и т.д )
    • «[k M G ]» — килобайты, мегабайты, гигабайты
  • «–type t» — тип файла, где t — одна буква:
    • «f» — файл
    • «d» — диретория
    • «l» — линк
  • «–group g» — выбрать фалы, принадлежащие группе «g»
  • «–user u » — то же самое для пользователя
  • «–perm mask» — файлы с заданными mask правами доступа
  • «–ls » — выдача аналогичная «ls», а не просто список
  • «–maxdepth n » — максимальная глубина поиска «n»
  • » -exec {} command\; » — исполнить команду command, где аргументами будут найденные файлы. После команды должна идти квотруемая точка с запятой » \;»

find во многом похож на ls, но отличие от ls:

  • не сортирует найденные файлы
  • по умолчанию ищет скрытые файлы
  • по умолчанию ищет файлы рекурсивно
  • имеет больше параметров для выбора нужных файлов
  • позволяет в рамках одной программы find задать действия, которые нужно произвести над выбранным файлами с помощью ключа -exec
!find . -ls | sort -k 11 | head -3
876005    4 drwxrwxr-x   3 sergey   sergey       4096 Sep  4 20:08 .
829784    4 -rw-rw-r--   1 sergey   sergey       2293 Sep  3 11:52 ./0.Bash_Keyboard_Shortcuts.ipynb
829779    4 -rw-rw-r--   1 sergey   sergey       3627 Sep  2 21:09 ./1.Bash_links.ipynb

Wildcards и regex по-разному ищут соответствия в названиях файла:

  • wildcards (ключ -name ): паттерн должен содержаться в имени файла (соответствует логике AWK)
  • regex (ключ -regex ): паттерн должен В ТОЧНОСТИ СООТВЕТСТВОВАТЬ найденному названию файла
!find . -name 'myfile*' # wildcards
./myfile-hardlink
./myfile-softlink
./myfile
!find . -name '*link' # wildcards
./myfile-hardlink
./hard-link
./myfile-softlink
!find . -regex '\./myfile.*' # regex
./myfile-hardlink
./myfile-softlink
./myfile
!find . -regex '.*\(link\)$' # regex
./myfile-hardlink
./hard-link
./myfile-softlink
!find . -regextype posix-extended -regex '.*(link)$' # regex
./myfile-hardlink
./hard-link
./myfile-softlink

AWK файлы так же, как и wildcards (ключ -name ): для того, чтобы AWK нашел строку с данным файлом, Достаточно, чтобы паттерн СОДЕРЖАЛСЯ в имени файла

!ls . | awk '/myfile/' # сравни с предыдущим find
myfile
myfile-hardlink
myfile-softlink
!find . -type f -size +1k
./2.Bash_Permissions_and_Ownership.ipynb
./3.Bash_Search_for_files.ipynb
./1.Bash_links.ipynb
!find . -mtime +1
!find . -type d -mtime -1 -ls
876005    4 drwxrwxr-x   3 sergey   sergey       4096 Sep  3 11:06 .
899419    4 drwxr-xr-x   2 sergey   sergey       4096 Sep  2 23:01 ./.ipynb_checkpoints
!find . -type d -regex '.*/.ipynb.*'
./.ipynb_checkpoints
!find . -type d -regex '.*/.ipynb.*' -exec ls {} \;
0.Bash_Keyboard_Shortcuts-checkpoint.ipynb
1.Bash_links-checkpoint.ipynb
2.Bash_Wildcards_Globbing_Extended_Globbing-checkpoint.ipynb
3.Bash_ls-checkpoint.ipynb
4.Bash_Permissions_and_Ownership-checkpoint.ipynb
5.Bash_Search_for_files-checkpoint.ipynb
7.Bash_file-checkpoint.ipynb
8.Bash_ps-checkpoint.ipynb
Write a comment:

*

Your email address will not be published.

© 2014 In R we trust.
Top
Follow us: