encontrar pastas contendo mas não iniciando com a. (ponto)

1

Como encontro todas as pastas que contêm um. no nome do arquivo? Eu tentei o seguinte, mas listou todas as pastas, não o que eu queria; encontrar. -maxdepth 2 -tipo d -ipath ". "

Parece que tenho muitas pastas com o nome de algo assim; Brain.Dead.1990.1080p.BluRay.x264-HD4U[rarbg] e isso é simplesmente feio para mim. Eu gostaria de listá-los e, em seguida, editar seus nomes para algo mais legível. Alguma pista?

    
por b0red 28.09.2018 / 13:24

3 respostas

1

Outra descoberta sem regex

find . -maxdepth 2 -type d -name '*.*' ! -name '.*'
    
por 28.09.2018 / 17:27
2
find . -maxdepth 2 -type d -name '*.*'

Informa qualquer diretório com . em seu nome, incluindo . , ./user/.config , ./.foo.d e ./.foo/bar.baz .

find . -maxdepth 2 -type d -name '?*.*'

Procuraria . na parte após o primeiro caractere, portanto, corresponderia a .foo.d , mas não a .config ou . .

find . -maxdepth 2 -type d -name '[!.]*.*'

Omitiria dirs ocultos (aqueles cujo nome começa com . ), mas ainda encontraria diretórios não ocultos dentro de diretórios ocultos (encontraria ./.foo/foo.bar ).

find . -maxdepth 2 -name '.?*' -prune -o -type d -name '?*.*' -print

Não percorrer nem reportar diretório oculto.

A única parte fora do padrão é o -maxdepth 2 que você já está usando. O equivalente padrão seria:

find . -name '.?*' -prune -o \
   \( ! -path './*/*' -o -prune \) \
   -type d -name '?*.*' -print
    
por 28.09.2018 / 17:43
1

Você pode usar uma expressão regular, se sua versão de find suportar isso:

find . -maxdepth 2 -type d -regex '.*/[^./][^/]*\.[^/]*'

Corresponde a qualquer diretório (com profundidade máxima de dois) cujo nome comece com qualquer caractere diferente de "." e contenha um "." em qualquer outra posição.

    
por 28.09.2018 / 13:49