Mostra todos os nomes de arquivos presentes no PWD e o diretório no 3º nível

0

Sem usar find e Comando único : mostra todos os nomes de arquivos presentes no PWD e no diretório no 3º nível.

Eu tenho uma solução ruim para mostrar todos os arquivos presentes no nível 3:

ls -l ./*/*/* |grep ^- |awk '{print $9}'| grep -E ^./\(.*/\){2}

ou

ls -ld ./*/*/* |grep ^- |awk '{print $9}'

mas como estender isso para mostrar todos os arquivos presentes no diretório atual e no nível 3. Eu não preciso usar find.

    
por zytham 19.09.2016 / 15:00

3 respostas

2

Você pode aproveitar a construção for com a ajuda do shell globbing e test ( [ ):

for f in * */*/*; do [ -f "$f" ] && echo "$f"; done
  • * */*/* corresponde a todos os arquivos e diretórios no diretório atual ( * ) e no terceiro nível ( */*/* )

  • [ -f "$f" ] verifica se é um arquivo, se assim for o nome do arquivo é impresso ( echo "$f" )

por 19.09.2016 / 15:05
0

Uma versão em perl:

perl -E 'say for(grep {-f } <*>, <*/*/*>)'

ou

perl -E 'map {say if -f} <*>, <*/*/*>'
    
por 19.09.2016 / 18:07
0

Aqui está uma solução possível: Comando único sem encontrar

tree -fiF | grep -E -e '^./[[:alnum:]]+/[[:alnum:]]+/[[:alnum:]]+/[[:alnum:]]+$' -e '^./[[:alnum:]]+$'
    
por 23.09.2016 / 15:32