obtém todos os nomes de arquivos em subdiretórios

0

Eu preciso obter todos os nomes de arquivos, não incluindo os caminhos, por exemplo, file1 está correto e ./folder/file1 está incorreto em subdiretórios. Meu caso de uso está recuperando todos os nomes de arquivos terminfo disponíveis que estão localizados dentro do diretório /usr/share/terminfo . Mas eles estão localizados dentro de outro conjunto de subdiretórios da seguinte forma:

terminfo ア ls
1  3  5  7  9  A  c  e  f  h  j  l  m  n  o  P  Q  s  u  w  X
2  4  6  8  a  b  d  E  g  i  k  L  M  N  p  q  r  t  v  x  z

terminfo ア cd 1
1 ア ls
1178  1730-lm

Você pode ver arquivos localizados dentro desses subdiretórios 1 3 ou A e preciso de todos os nomes de arquivos de cada subdiretório. Há um total de 42 directories, 2720 files para que o processo manual seja exaustivo.

    
por Abhinav Gauniyal 18.02.2017 / 10:33

3 respostas

1

find /usr/share/terminfo -type f -exec basename {} \;

    
por 18.02.2017 / 10:35
1

Como sabemos que os arquivos que gostaríamos de ter os nomes de são dois níveis em /usr/share/terminfo , e que não há mais diretórios abaixo, isso seria uma solução rápida (somente executa find e cut uma vez):

$ find /usr/share/terminfo -type f | cut -d '/' -f 6

Alternativamente, com uma substituição sed ligeiramente mais "pesada":

$ find /usr/share/terminfo -type f | sed 's#^.*/##'

A substituição sed remove tudo até e incluindo o último / de cada linha de saída de find .

    
por 18.02.2017 / 10:51
1

1 Usando árvore

(man tree para detalhes)

tree -i /usr/shar/terminfo

ou se você quiser remover os diretórios:

tree -iF /usr/shar/terminfo | grep -v /

2 Usando ls

ls -R /usr/share/terminfo  | grep -v /
ls /usr/share/terminfo/*/* | grep -o '[^/]*$'

basename -a $(ls /usr/share/terminfo/*/*)
    
por 18.02.2017 / 11:28