Jak mam globować dla wszystkich ukrytych plików?

22

Chcę wykonać akcję (powiedzmy chown) na wszystkich ukrytych plikach w katalogu.

Wiem, że .*to nie jest dobry pomysł, ponieważ będzie również znaleźć aktualne .i nadrzędnych ..katalogów (wiem, że rmnie będzie w stanie operować .a ..jednak inne polecenia, w tym chowni chmodbędzie szczęśliwie się skuteczna)

Ale wszystkie moje ukryte pliki mają różne nazwy!

Jak mam globować dla wszystkich ukrytych plików, wyłączając .i ..?

Zanna
źródło

Odpowiedzi:

20

Możesz użyć następującego extglobwzoru:

.@(!(.|))
  • .mecze dosłownym .najpierw

  • @()jest extglobwzorem, pasuje do jednego z wzorów w środku, ponieważ mamy tylko jeden wzór w środku, wybierze to

  • !(.|)to kolejny extglobwzorzec (zagnieżdżony), który pasuje do dowolnego pliku bez lub z jednym .; Jak już dopasowaliśmy .na początku, cały ten wzór będzie pasował do wszystkich plików zaczynających się od, z .wyjątkiem .i ...

extglobjest bashdomyślnie włączony w interaktywnych sesjach w Ubuntu. Jeśli nie, włącz najpierw:

shopt -s extglob

Przykład:

$ echo .@(!(.|))
.bar .foo .spam
heemayl
źródło
To zdecydowanie niesamowita rzecz, o której muszę się nauczyć! Dziękujemy za nauczanie
Zanna,
@Zanna Glad mogłem pomóc :)
heemayl
2
Jaki jest cel tego @()? Proste .!(.|)wydaje się działać identycznie.
Kyle Strand,
1
Wiem, że to stare, ale mam takie samo pytanie jak @KyleStrand. W moich testach !(.|)działa tak samo. Czy @()w tym kontekście jest jakiś cel ?
Paddy Landau
Czy huk jest zaprzeczeniem? Nie wspomniano o tym i czytając twoje wyjaśnienie, mam wrażenie, że wzór pasuje do kropki i doubleledot, ale wyraźnie opisujesz pliki, które pasują do początkowej kropki, z wyjątkiem tych dwóch.
użytkownik nieznany
20
 GLOBIGNORE=".:.."

ukryć. i .. katalogi. To także ustawia dotglobopcję: *dopasowuje zarówno ukryte, jak i nie ukryte pliki.

Możesz też zrobić

shopt -s dotglob

Gilles :)

Rinzwind
źródło
9

Możesz użyć findpolecenia tutaj. Na przykład coś takiego

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

Znajdzie to ukryte pliki i zmieni uprawnienia


Edytuj, aby dołączyć komentarz @gerrit:

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

Spowoduje to ograniczenie wyszukiwania do góry bieżącego katalogu zamiast wyszukiwania rekurencyjnego.

Wayne_Yux
źródło
4
Możesz dodać -maxdepth 1tutaj, aby bardziej pasowało do zachowania w pytaniu i innych odpowiedziach.
gerrit