Como devo enviar glob para todos os arquivos ocultos?

22

Quero executar alguma ação (por exemplo chown) em todos os arquivos ocultos em um diretório.

Eu sei que isso não.* é uma boa ideia, pois também encontrará os diretórios atual e pai (eu sei que falhará em operar e, mas outros comandos, incluindo e , terão efeito feliz)...rm...chownchmod

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

Como devo enviar glob para todos os arquivos ocultos enquanto excluo .e ..?

Zanna
fonte

Respostas:

20

Você pode usar o seguinte extglobpadrão:

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

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

  • !(.|)é outro extglobpadrão (aninhado), que corresponde a qualquer arquivo com nenhum ou nenhum .; Como já correspondemos .no início, todo esse padrão corresponderá a todos os arquivos iniciados com .exceção de .e ...

extglobestá ativado em sessões interativas bashpor padrão no Ubuntu. Caso contrário, ative-o primeiro:

shopt -s extglob

Exemplo:

$ echo .@(!(.|))
.bar .foo .spam
heemail
fonte
Isso é claramente uma coisa incrível que eu preciso aprender! Obrigado por ensinar
Zanna
@Zanna Ainda bem que pude ajudar :)
heemayl
2
Qual é o propósito do @()? Simples .!(.|)parece funcionar de forma idêntica.
Kyle Strand
1
Sei que isso é antigo, mas tenho a mesma pergunta que @KyleStrand. Nos meus testes, !(.|)funciona da mesma maneira. Existe algum objetivo por trás @()deste contexto?
Almofada Landau
O personagem bang é uma negação? Não é mencionado e, ao ler sua explicação, tenho a impressão de que o padrão corresponde a ponto e ponto duplo, mas você descreve claramente arquivos que correspondem a um ponto inicial, exceto apenas os dois.
usuário desconhecido
20
 GLOBIGNORE=".:.."

esconder o. e .. diretórios. Isso também define a dotglobopção: *corresponde aos arquivos ocultos e não ocultos.

Você também pode fazer

shopt -s dotglob

Gilles :)

Rinzwind
fonte
9

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

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

Isso encontrará arquivos ocultos e alterará permissões


Edite para incluir o comentário de @gerrit:

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

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

Wayne_Yux
fonte
4
Você pode adicionar um -maxdepth 1aqui para que ele corresponda melhor ao comportamento da pergunta e das outras respostas.
gerrit