Como devo glob para todos os arquivos ocultos?

22

Eu quero realizar alguma ação (digamos chown ) em todos os arquivos ocultos em um diretório.

Sei que essa .* é não uma boa ideia, pois ela também encontrará os diretórios . e parent .. atuais (sei que rm não funcionará em . e .. , mas outros comandos, incluindo chown e chmod , terão um efeito feliz)

Mas todos os meus arquivos ocultos têm nomes diferentes!

Como devo glob para todos os arquivos ocultos, excluindo . e .. ?

    
por Zanna 26.09.2016 / 12:21

3 respostas

19

Você pode usar o seguinte padrão extglob :

.@(!(.|))
  • . corresponde a um literal . no início

  • @() é um padrão extglob , corresponderá a um dos padrões internos, pois temos apenas um padrão dentro dele, ele selecionará

  • !(.|) é outro padrão extglob (aninhado), que corresponde a qualquer arquivo sem ou um . ; Como já combinamos . no início, esse padrão inteiro corresponderá a todos os arquivos que começam com . , exceto . e .. .

extglob está ativado em sessões interativas de bash por padrão no Ubuntu. Se não, ative primeiro:

shopt -s extglob

Exemplo:

$ echo .@(!(.|))
.bar .foo .spam
    
por heemayl 26.09.2016 / 12:34
20
 GLOBIGNORE=".:.."

para ocultar o arquivo. e .. diretórios. Isso também define a opção dotglob : * corresponde a arquivos ocultos e não ocultos.

Você também pode fazer

shopt -s dotglob

Gilles :)

    
por Rinzwind 26.09.2016 / 12:24
8

Você pode usar um comando find aqui. Por exemplo, algo como

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

Isso localizará arquivos ocultos e alterará as permissões

Edite para incluir o comentário de @gerrit:

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

Isso limitará a pesquisa ao topo do diretório atual, em vez de pesquisar recursivamente.

    
por Wayne_Yux 26.09.2016 / 12:28