Como listar os arquivos que começam com “a” ou “c” de / etc.

6

Eu tentei ls /etc/[ac]* , mas ele mostra diretórios começando com um ou c , e todo o seu conteúdo, não os arquivos que começam com " a c ".

    
por 3df 22.05.2014 / 04:50

7 respostas

19

Para evitar listar o conteúdo dos diretórios, você pode:

ls -d /etc/[ac]*

Isso listará o diretório nomes junto com nomes de arquivos comuns que começam com a ou c .

Para completar, uma solução que não envolva find pode ser:

ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9
    
por 22.05.2014 / 04:58
7

Recursivamente:

find /etc -type f -name '[ac]*'

Se você precisar de não-recursão, poderá fazer isso de forma portável:

find /etc/. ! -name . -prune -type f -name '[ac]*'

Ou isto, não-portável (GNU ou uma descoberta recente do BSD):

find /etc -type f -maxdepth 1 -name '[ac]*'

Se você quiser fazer isso insensivelmente, use -iname em vez de -name .

    
por 22.05.2014 / 04:55
1

Você também pode tentar este comando,

for file in /etc/[ac]*; do echo $file; done | xargs file | awk -v FS=" +" '$2~/directory/ {next;} {print $1}' | sed 's|\/etc\/||g;s/://g'
    
por 22.05.2014 / 05:48
1

Se você quer tanto directorys (não conteúdo do diretório) e arquivos, você pode usar printf bultin:

printf "%s\n" [ac]*

Exemplo:

$ printf "%s\n" [te]*
examples.desktop
teamviewer_linux.deb
test.php
test.txt
    
por 22.05.2014 / 05:34
1

Não recursivo sem find :

ls -pd /etc/[ac]* | grep -v '/$'

o -p adiciona / no final dos diretórios, que o grep filtra. Claro que não funciona para nomes de arquivos que contenham caracteres especiais, como novas linhas.

    
por 22.05.2014 / 08:05
1

com zsh :

print -rl /etc/[ac]*(.)

Relacionaria os arquivos regulares (como em -type f in find ) listados em /etc cujo nome começa com a ou c . A parte (xxx) no final de uma glob é um recurso específico do zsh chamado qualificador globbing. . como um qualificador globbing significa arquivo regular .

Se a glob não corresponder, zsh cancelará o comando. Observe que em outros shells semelhantes a Bourne, se o glob não corresponder, o padrão se expandirá para si mesmo, portanto, ls -d /etc/[ac]* poderia listar incorretamente um arquivo chamado /etc/[ac]* se não houver nenhum arquivo começando com a ou c em /etc .

print -rl /etc/[ac]*(^/)

listaria os arquivos não do tipo diretório e

print -rl /etc/[ac]*(-^/)

listaria os arquivos que não são do tipo diretório após a resolução de links simbólicos.

    
por 23.05.2014 / 15:45
-3

Para arquivos de exibição que começam com:

ls etc |  grep ^a

Para exibir arquivos começando com c:

ls etc |  grep ^c
    
por 05.10.2018 / 09:11

Tags