listar arquivos em um diretório sem listar subdiretórios e seus conteúdos nesse diretório

22

Eu quero criar uma lista de todos os arquivos em um diretório, sem listar nenhum dos subdiretórios que residem no mesmo diretório, e imprimir essa lista em um novo arquivo.

ls -d * > filelist

criará uma lista de todos os arquivos no diretório atual, mas também listará os subdiretórios no diretório atual. Eu tentei o comando find usando a opção -maxdepth 1 - no entanto, o formato de saída é um problema, pois o find também imprime o caminho junto com os nomes dos arquivos.

Se alguém puder, por favor, me dizer, talvez, que outro comando ou opções para usar produzirão uma lista de saída apenas dos arquivos em um diretório e não os nomes dos subdiretórios ou seus conteúdos, eu agradeceria.

    
por janet 02.05.2013 / 02:43

6 respostas

21

Solução baseada em localização:

find . -maxdepth 1 -type f -printf '%f\n'

Solução baseada em Bash:

for f in *; do [[ -d "$f" ]] || echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -d "$f" ]] || ls -- "$f"; done

A solução baseada em bash vai te dar tudo que não é um diretório; incluirá coisas como pipes nomeados (você provavelmente quer isso). Se você quer especificamente apenas arquivos , use o comando find ou um destes:

for f in *; do [[ -f "$f" ]] && echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -f "$f" ]] && ls -- "$f"; done

Se você for usar isso regularmente, é claro que você pode colocar isso em um alias em algum lugar no seu ~/.bashrc :

alias lsfiles='for f in *; do [[ -f "$f" ]] && ls -- "$f"; done'

Desde que você observou nos comentários que você está realmente no OSX em vez do Ubuntu, eu sugiro que da próxima vez você direcione as perguntas para a Apple Unix & amp; Linux Empilhe sites do Exchange.

    
por evilsoup 02.10.2013 / 12:37
8

Listar apenas nomes de arquivos:

 1. ls -p | grep -v /                                   (without hidden files)
 2. ls -l | grep ^- | tr -s ' ' | cut -d ' ' -f 9       (without hidden files)

 a) ls -pa | grep -v /                                  (with hidden files)
 b) ls -la | grep ^- | tr -s ' ' | cut -d ' ' -f        (with hidden files)

Listar somente diretórios:

 1. ls -p | grep /                                      (without hidden)
 2. ls -l | grep ^d | tr -s ' ' | cut -d ' ' -f 9       (without hidden) 

 a) ls -pa | grep /                                     (with hidden)
 b) ls -l | grep ^d | tr -s ' ' | cut -d ' ' -f 9       (with hidden)

grep -v -e ^ $ é para remover linhas em branco do resultado.

Mais detalhes :
ls -p flag é colocar '/' no final do nome do diretório, -R flag é para pesquisa recursiva, -l para listar com info, -a para listar todos (incluindo arquivos ocultos) com info, grep -v flag é para inverter resultado e -e flag para correspondência de expressão regular.

    
por Ananda 14.04.2015 / 13:57
7

Para listar apenas arquivos regulares:

ls -al | grep ^-

Com links simbólicos incluídos:

ls -al | grep ^[-l]

Onde o primeiro caractere da lista descreve o tipo de arquivo, então - significa que é um arquivo regular, pois o link simbólico é l .

Debian / Ubuntu

Imprima os nomes de todos os arquivos correspondentes (incluindo links):

run-parts --list --regex . .

com caminhos absolutos:

run-parts --list --regex . $PWD

Imprima os nomes de todos os arquivos em /etc que começam com p e terminam com d :

run-parts --list --regex '^p.*d$' /etc
    
por kenorb 04.03.2015 / 18:41
5

Mais uma solução, ingenuamente curta, que funcionou para mim:

ls -la | grep -E '^[^d]' > files
    
por arsaKasra 05.10.2013 / 11:29
4

Sugiro usar o find e apenas remover o nome do diretório da saída, se necessário:

find . -type f -maxdepth 1 | sed s,^./,,
    
por Cougar 02.10.2013 / 08:35
3
ls -1 --file-type | grep -v '/' | sed s/@$// > filelist

Outra opção possível é

ls -F | grep -v '/' | sed /[@*]$// > filelist

O --file-type coloca um / no final das pastas (mas também um @ no final dos links simbólicos. The grep -v '/' remove os subdiretórios (porque agora eles terminam com '/'). O sed s/@$// remove que @. O -1 imprime um arquivo por linha para que o grep -v funcione corretamente.

    
por Dr.Tower 02.05.2013 / 02:56

Tags