Як виключити процедуру пошуку та синхронних папок із пошуку за допомогою команди find?


10

Я хотів виконати сценарій, який вибирає довільний шлях до каталогу:

find / -type d | shuf -n1 

На жаль, я отримую повідомлення про помилки щодо заборони входити до певних каталогів.

Як я можу виключити каталог із пошуку за допомогою пошуку?

Відповіді:


13

Щоб виключити конкретні шляхи, в Linux:

find / -path /sys -prune -o -path /proc -prune -o -type d

Інший підхід полягає в тому, щоб сказати findне повторюватися в різних файлових системах.

find / -xdev -type d

Ви також можете використовувати locate для запиту бази даних імен файлів (зазвичай оновлюються щоночі, ви також можете оновити її вручну за допомогою updatedb) замість живої системи.

locate '*' | shuf -n 1

чудовий, короткий і проникливий. Знайти / -xdev -тип d сам працює, але знайти / -xdev -тип d | shuf -n 1 відображає повідомлення про помилки.
Абдул Аль Хазред

1
@AbdulAlHazred ви не сказали, які повідомлення, але я припускаю, що помилки "відмовлено у дозволі". Або виконайте команду як root, або просто ігноруйте помилки, надсилаючи їх до stderr : find / -xdev -type d 2>/dev/null.
тердон

1
Чи не могли б ви не просто find / \( -path /sys -o -path /proc \) -prune -o -type dб корисно , якщо ви хочете , щоб виключити більш тек /devабо /tmpі т.д.
BrainStone

6

при пошуку GNU ви також можете скористатися параметрами регулярних виразів, наприклад, таким:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d

це найприємніший підхід, на сьогоднішній день (rant: значить, є gnu варіант, який робить пошук / придатним для використання на gnu linux, як і в будь-якій іншій операційній системі, у якої не було реалізованої роботи
Florian
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.