Shell команда find

find - shell команда для пошуку файлів і каталогів в ієрархії каталогів. Розглянемо деякі способи використання цієї команди і кілька її опцій пошуку.

Найпростіший приклад знаходження файлу по імені за допомогою команди find:

find. -name test

після написання find пишемо шлях до папки, де треба шукати, ми вказали точку, тобто шукати в поточному каталозі. Далі ключ -name використовується для пошуку по імені, після його слід ім'я папки або файлу, який ми іщем.В даному прикладі ми вказали команді шукати файл за назвою test в поточному каталозі (. - точка це позначення поточного каталогу)

find. -iname test

- той же пошук по імені, але без урахування регістру в назві файлів.

Але, справа в тому, що в прикладі вище ми не вказали, що шукаємо саме файл, по тому, якщо в поточному каталозі або його підкаталозі існує папка з назвою test, то вона теж потрапить в результати пошуку. Для вказівки того, що ми шукаємо саме файл, і що назви папок в результати пошуку включати не треба, використовуємо ключ «-type»

find. -type f -name test

«-type f» - ми вказали, що шукаємо саме файл (f)
Для того, щоб в результат включити одні папки з назвою test, а файли не шукати, використовуємо
«-type d»

find. -type d -name test

А що, якщо нам треба знайти всі файли з розширенням «.db», тоді використовуємо зірочку «*».
* - замінює будь-який набір символів. І того, для пошуку всіх файлів з розширенням «.db» в каталозі / var / named використовуємо таку команду:

find / var / named -type f -name * .db

Тут ми замінили каталог для пошуку на / var / named.

Якщо треба знайти файли або папки за датою їх створення або останнього доступу до них, використовуємо ключ «-atime» - пошук по даті останнього доступу до файлу (або ж його створення, якщо ніхто до нього ще не доступать).

find. -type f -atime 1

Ми вказали що шукаємо все фали в поточному каталозі, які були створені або ж до них востаннє доступать за минулу добу, тобто більше ніж 24 години і менше ніж 48 годин тому. «-atime n» - вважається n * 24, тобто в нашому випадку 1 * 24 = 24 години назад, і команда шукає саме скільки 24-годинних періодів назад доступать до файлу.

А ось наступна команда знайде всі файли, до яких доступать більше ніж 24 назад:

find. -type f -atime +1

Далі можемо знайти все папки, до яких доступать більше ніж 48 годин назад:

find. -type d -atime +2

Всі файли, до яких доступать за останню добу:

find. -type f -atime -1

За цим же принципом можемо використовувати ключі
«-ctime n» - за датою створення або зміни статусу файлу або папки
«-mtime n» - пошук файлів, які були змінені (редагувати, або створені) n * 24 годин тому
«-amin n» - файли або папки, до яких доступать n хвилин тому
«-cmin n» - файли або папки, статус яких був змінений (або були вони створені) n хвилин тому
«-mmin» - файли або папки, які були змінені (або створені) n хвилин тому

Можна проводити пошук файлів і каталогів по їх власнику (користувачеві), використовуючи ключ «-user»:

find. -name * .jpg -user nobody

Ми вказали що шукаємо в поточному каталозі всі файли з розширенням .jpg, у яких варто власник nobody

Розглянемо ситуацію, коли нам треба над результатом пошуку виконати будь-яку команду, наприклад видалити всі знайдені файли. В такому випадку використовуємо ключ «-exec». Він використовується для вказівки іншої команди, яку треба виконати над кожним аргументом результат пошуку:

find / tmp -type f -name sess * -exec rm -f <> \;

«/ Tmp» - вказуємо що шукаємо файли в папці / tmp
«-type f» - шукаємо тільки файли і каталоги в результат пошуку не включати
«-name sess *» - всі файли, ім'я яких починається зі слова «sess»
«-exec rm -f <>»- запустити команду« rm -f »(видалення) для кожного файлу
«<>»- замінює список знайдених аргументів
«\;» - кінець команди (в даному випадку використання «find» вказувати обов'язково)

Наступний приклад показує як поміняти права на всі файли в папці:

find / home / nobody / public_html -type f -exec chmod 644 <> \;

і на всі папки:

find / home / nobody / public_html -type d -exec chmod 755 <> \;

Але при заміні прав на папки даною командою, на сам каталог public_html теж права змінюються, так як в результати буде розташований поточний каталог, який позначається крапкою «.». Тоді повертаємо назад:

chmod 750 public_html