Як слід глобувати всі приховані файли?


22

Я хочу здійснити певну дію (скажімо chown) на всіх прихованих файлах у каталозі.

Я знаю , що це .*є НЕ дуже гарною ідеєю , тому що вона також буде знайти поточні .та батьківські ..каталоги (я знаю , що rmбуде не в змозі працювати на .і , ..але і інші команди, в тому числі chownі chmod, щасливо вступить в силу)

Але всі мої приховані файли мають різні назви!

Як слід глобувати всі приховані файли, виключаючи .та ..?

Відповіді:


20

Ви можете використовувати таку extglobсхему:

.@(!(.|))
  • ..спочатку відповідає буквальному

  • @()є extglobвізерунком, відповідатиме одному з візерунків всередині, оскільки у нас є лише один візерунок, він вибере це

  • !(.|)інший extglobшаблон (вкладений), який відповідає будь-якому файлу без жодного або одного .; Як ми вже зіставили .на початку, весь цей візерунок буде відповідати всім файлам, починаючи з і, .крім ....

extglobувімкнено на інтерактивних сесіях bashUbuntu за замовчуванням. Якщо ні, спочатку ввімкніть це:

shopt -s extglob

Приклад:

$ echo .@(!(.|))
.bar .foo .spam

Це явно дивовижна річ, про яку мені потрібно дізнатися! Дякую за навчання
Zanna

@Zanna Рада, я можу допомогти :)
heemayl

2
Яке призначення @()? Простий, .!(.|)здається, працює однаково.
Кайл Странд

1
Я знаю, що це старе, але у мене те саме питання, що і у @KyleStrand. У моїх тестах !(.|)працює так само. Чи є @()в цьому контексті якась мета ?
Падді Ландау

Чи характер зачіски є запереченням? Це не згадується, і, читаючи ваше пояснення, у мене складається враження, що візерунок відповідає крапці та дубльдоту, але ви чітко описуєте файли, які відповідають початковій крапці, за винятком лише цих двох.
користувач невідомий

20
 GLOBIGNORE=".:.."

щоб приховати. і .. довідники. Це також встановлює dotglobопцію: *відповідає як прихованим, так і не прихованим файлам.

Ви також можете зробити

shopt -s dotglob

Жиль :)


9

Тут можна використовувати findкоманду. Наприклад щось подібне

find -type f -name ".*" -exec chmod 775 {} \;

Це знайде приховані файли та зміни прав


Редагуйте, щоб включити коментар @gerrit:

find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;

Це обмежить пошук у верхній частині поточного каталогу замість рекурсивного пошуку.


4
Ви можете додати -maxdepth 1сюди для цього, щоб більше відповідати поведінці у питанні та інших відповідях.
Герріт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.