Como posso encontrar arquivos com 7 caracteres (e nenhuma extensão) em seus nomes?

0

Eu quero listar arquivos que contenham apenas sete caracteres (sem extensões) em seus nomes de arquivo.

Eu tenho esses arquivos em um diretório, por exemplo:

1234567
bar.12
dog.cat
1234567.txt
tst.new
big.tst
abcdefg
abcd.efg

Eu quero listar arquivos usando o comando ls para encontrar nomes de arquivos sem extensões que tenham exatamente 7 caracteres. Eu quero que a saída seja algo como isto:

$ ls <some kind of code>
1234567
abcdefg

Eu prefiro não usar nenhuma globs de qualquer tipo, ou o comando find .

    
por Yooso Lee 17.04.2017 / 21:03

3 respostas

2

Aqui está uma espécie de solução com curingas de shell (exatamente 7 caracteres que não são . )

ls [!.][!.][!.][!.][!.][!.][!.]

E aqui está uma solução com find usando negação regex (não literal . = [^\.] ) e especificando quantos caracteres {7}

find -maxdepth 1 -regextype posix-extended -regex '\./[^.]{7}'

Não é o que você pediu, mas duvido que isso possa ser feito sem algum tipo de curinga ou regex.

    
por Zanna 17.04.2017 / 21:32
1

No Bash:

 for f in ??????? ; do 
     [[ $f = *.* ]] && continue; 
     echo $f ;                     # do something useful here
 done

com find :

find -maxdepth 1 -name "???????" ! -name "*.*"

Apesar de você ter pedido sem globs ou encontrado e usado a palavra "professor", talvez esteja procurando por ls | grep ... . Mas veja também algumas razões para evitar usar ls para isso.

    
por ilkkachu 17.04.2017 / 23:09
1

Com globs estendidos em zsh :

% ls
1234567  1234567.txt  abcdefg  abcd.efg  bar.12  big.tst  dog.cat  tst.new

então

% setopt extended_glob
% ls (?~.)(#c7)
1234567  abcdefg
  • ?~. de qualquer caractere, exceto .
  • (#c7) um sinalizador de globbing equivalente ao quantificador de expressão regular {7}

Veja zsh: 14 Expansão

    
por steeldriver 17.04.2017 / 23:26