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