<Попередній | зміст | Наступна>
Попередньо визначені дії
Давайте попрацюємо! Маючи список результатів нашого знаходити Команда корисна, але ми дійсно хочемо діяти з елементами зі списку. на щастя, знаходити дозволяє виконувати дії на основі результатів пошуку. Існує набір попередньо визначених дій і кілька способів застосування визначених користувачем дій. Спочатку розглянемо кілька попередньо визначених дій:
Таблиця 17-6: Попередньо визначені дії пошуку
Опис дії
Опис дії
-delete Видалити поточний відповідний файл.
-ls Виконайте еквівалент ls -dils на відповідний файл.
Вихідні дані надсилаються на стандартний вихід.
-print Вивести повний шлях відповідного файлу до стандартного виводу. Це дія за замовчуванням, якщо не вказано іншу дію.
-quit Вийти, як тільки буде збіг.
Як і з тестами, тут набагато більше дій. Див знаходити man сторінку для повної інформації. У нашому першому прикладі ми зробили це:
знайти ~
знайти ~
який створив список усіх файлів і підкаталогів, що містяться в нашому домашньому каталозі. Він створив список, тому що -друк дія мається на увазі, якщо не вказано іншу дію. Таким чином, наша команда також може бути виражена так:
знайти ~ -друк
знайти ~ -друк
Ми можемо використовувати знаходити щоб видалити файли, які відповідають певним критеріям. Наприклад, щоб видалити файли, які
мати розширення файлу «.BAK» (яке часто використовується для позначення файлів резервної копії), ми можемо використовувати цю команду:
знайти ~ -type f -name '*.BAK' -delete
знайти ~ -type f -name '*.BAK' -delete
У цьому прикладі в кожному файлі в домашньому каталозі користувача (і його підкаталогах) здійснюється пошук імен файлів, що закінчуються на .BAK. Коли вони знайдені, вони видаляються.
Увага! Само собою зрозуміло, що ви повинні будьте вкрай обережні при використанні -видалити дії. Завжди спочатку перевіряйте команду, замінюючи
-print дію для -delete, щоб підтвердити результати пошуку.
Перш ніж продовжити, давайте ще раз подивимося, як логічні оператори впливають на дії. Розглянемо таку команду:
знайти ~ -type f -name '*.BAK' -print
знайти ~ -type f -name '*.BAK' -print
Як ми бачили, ця команда шукатиме кожен звичайний файл (-type f), ім'я якого закінчується на .BAK (-name '*.BAK') і виведе відносний шлях кожного відповідного файлу у стандартний вихід (-print). Однак причина, чому команда виконує таку роботу, визначається логічними зв’язками між кожним із тестів і дій. Пам’ятайте, що за замовчуванням між кожним тестом і дією існує неявний зв’язок -і. Ми також можемо виразити команду таким чином, щоб легше було побачити логічні зв’язки:
знайти ~ -type f -and -name '*.BAK' -і -print
знайти ~ -type f -and -name '*.BAK' -і -print
Коли наша команда повністю виражена, давайте подивимося, як логічні оператори впливають на її виконання:
Тест/дія виконується лише якщо...
Тест/дія виконується лише якщо...
-друк -type f і -name '*.BAK' відповідають дійсності
-назва '*.BAK' -типу f відповідає дійсності
-типу f Виконується завжди, оскільки це перший тест/дія в an
-і відносини.
Оскільки логічний зв’язок між тестами та діями визначає, які з них виконуються, ми бачимо, що порядок тестів і дій важливий. Наприклад, якщо ми змінимо порядок тестів і дій так, щоб -друк дія була першою, команда діяла б зовсім інакше:
знайти ~ -print -and -type f -and -name '*.BAK'
знайти ~ -print -and -type f -and -name '*.BAK'
Ця версія команди друкуватиме кожен файл ( -друк action завжди має значення true), а потім перевірте тип файлу та вказане розширення файлу.