Se eu digitar:
ls source/*
source/fonts:
fontello
source/images:
bg1.png eng.png fra.png
Eu recebo a lista de arquivos, agrupados por nomes de pastas. Como posso simplesmente obter a lista de nomes de arquivos?
ls source/*
source/fonts/fontello
source/images/bg1.png
source/images/eng.png
source/images/fra.png
Obrigado
find
errado também; particularmente, se você estiver correndofor file in $(find ...)
, você acertou um deles).Respostas:
Parece não ser possível sem alteração na saída, mas aqui está uma maneira alternativa fácil:
Ou (específico para a localização do GNU), para obter apenas arquivos detalhados na sua pergunta:
(ou se você quiser diretórios como o
ls
dá, remova-type f
)fonte
Você pode simplesmente manter ls se adicionar alguns psicodélicos (
ls -d
):fonte
find
é um animal gordo.Você pode estar interessado em "o pobre homem
find
":shopt -s
s ETS a opção shell nomeado (s). Aglobstar
opção é definida da seguinte forma no bash (1) :Então, depois de concluir
shopt -s globstar
, qualquer um dos seguintes comandos:produzirá a saída:
Infelizmente, isso inclui também os nomes dos diretórios. Talvez ajude um pouco a saber que
produzirá a saída:
ou seja, apenas os nomes de diretório. Você pode redirecionar a saída de um dos primeiros conjuntos de comandos para um arquivo, redirecionar a saída dos itens acima para um segundo arquivo e, em seguida
comm
, usardiff
, ou algo semelhante, para subtrair o segundo arquivo do primeiro, deixando apenas a planície arquivos (não diretórios). Mas não faça isso.Outra abordagem (que não é muito melhor) é
A
--file-type
opção dizls
para exibir um/
no final de cada nome de diretório (e outros caracteres no final de outros tipos de arquivos (especiais)), assim:e então
grep -v '/$'
remove as linhas que terminam com/
; ou seja, os nomes dos diretórios. Infelizmente, a--file-type
opção não é especificada pelo POSIX . Se a sua versão dols
não suportar, use-F
. É assim,--file-type
exceto que também exibe um*
no final dos nomes dos arquivos executáveis, o que algumas pessoas consideram irritante. Você pode eliminá-los comsed
:Se você quiser fazer algo com todos os arquivos (e apenas os arquivos), poderá fazer
Notas:
ls
é saída para um terminal, e não é em-l
( l modo ong), escreve vários nomes por linha (a menos que os nomes são muito longos). Você pode forçá-lo a escrever um nome por linha especificando-1
(um) ou redirecionando a saída para um arquivo ou canal.--
dosls
comandos, pois está listando um diretório cujo conteúdo foi criado. Você deve usá-lo ao listar*
em um diretório desconhecido, como proteção contra nomes de arquivos que começam com-
.ls
.globstar
opção shell parece não estar definida pelo POSIX. (Na verdade, não tenho certeza se o POSIX reconhece nenhuma opção de shell.) Embora pareça umbash
ismo, tenha cuidado - ele pode não estar presente em todas as versões do bash.Se
fonts
ouimages
tiver subdiretórios,**
os listará todos, recursivamente, até o fim. Uma maneira (um tanto arrogante e não confiável) de limitar a profundidade éque remove linhas contendo três ou mais
/
caracteres.fonte