Como faço para que o ls cuspa uma lista simples de caminhos recursivos de uma por linha?
Por exemplo, eu quero apenas uma lista simples de arquivos com seus caminhos completos:
/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow
/home/dreftymac/stackoverflow/alpha.txt
/home/dreftymac/stackoverflow/bravo.txt
/home/dreftymac/stackoverflow/charlie.txt
ls -a1
quase faz o que preciso, mas não quero fragmentos de caminho, quero caminhos completos.
bash
command-line
find
ls
dreftymac
fonte
fonte
Respostas:
Se você realmente deseja usar
ls
, formate sua saída usando o awk:fonte
awk
expressões acima ?Use find:
Se você deseja apenas arquivos (omita diretórios, dispositivos etc.):
fonte
ls
parâmetros como--sort=extension
"redimido" por esta solução?ls -ld $(find .)
se você deseja classificar sua saída por tempo de modificação:
ls -ltd $(find .)
fonte
--sort=extension
parâmetro dels
find . -name "*" -exec ls -ld '{}' \;
(que um funciona independentemente do número de arquivos é), mas o seu comando é o caminho mais curto para escrever;)find . -ls
.Tente da seguinte maneira mais simples:
fonte
find "`pwd`"
se o caminho contiver espaços ou outros caracteres especiais.find .
? -.-pwd
para começar, ele imprimirá caminhos absolutos. By the way, "Como isso é diferente do quefind
" ;-)O melhor comando é:
tree -fi
Para usar os arquivos, mas não os links, você deve remover
>
da sua saída:Se você deseja conhecer a natureza de cada arquivo (para ler apenas arquivos ASCII, por exemplo) com dois
while
s:fonte
tree
!brew install tree
, dado que você está usando homebrewOh, realmente uma longa lista de respostas. Ajudou bastante e, por fim, criei o meu próprio que estava procurando:
Para listar todos os arquivos em um diretório e seus subdiretórios:
Para listar todos os diretórios em um diretório e seus subdiretórios:
Para listar todos os diretórios e arquivos em um diretório e seus subdiretórios:
fonte
find "$PWD" -type f | grep '\.json$'
Não sei o caminho completo, mas você pode usar
-R
para recursão. Como alternativa, se você não se interessals
, pode fazê-lofind *
.fonte
Usando nenhum comando externo além de ls:
fonte
Útil para alguns reservatórios de eletrodomésticos limitados, onde a localização / localização não está disponível.
fonte
awk
?encontre / fará o truque
fonte
Não torne complicado. Eu apenas usei isso e obtive uma saída bonita:
fonte
ls -lR
não atingiria esse objetivo.A maneira mais fácil para todas as futuras pessoas é simplesmente:
No entanto, isso também mostra o tamanho do conteúdo de cada pasta. Você pode usar o awk para gerar apenas o nome da pasta:
Edit- Desculpe, desculpe, meu mal. Eu pensei que eram apenas as pastas que eram necessárias. Vou deixar isso aqui, caso alguém no futuro precise de qualquer maneira ...
fonte
Com a liberdade de usar todas as opções possíveis de ls:
find -type f | xargs ls -1
fonte
Para uma lista simples, acho que a melhor maneira é:
(ou para salvá-lo em um arquivo txt)
fonte
find: illegal option -- D
Execute um comando bash com o seguinte formato:
fonte
Aqui está uma resposta parcial que mostra os nomes dos diretórios.
Explicação:
ls -mR *
lista os nomes completos de diretórios que terminam em ':' e, em seguida, lista os arquivos nesse diretório separadamentesed -n 's/://p'
localiza linhas que terminam em dois pontos, retira os dois pontos e imprime a linhaAo iterar sobre a lista de diretórios, também devemos encontrar os diretórios. Ainda trabalhando nisso. É um desafio obter os curingas através do xargs.
fonte
A adição de um curinga ao final de um diretório ls força os caminhos completos. Agora você tem o seguinte:
Você poderia fazer isso:
Infelizmente, isso não imprime o caminho completo dos diretórios retornados, portanto pode não ser a solução completa que você está procurando.
fonte
Muitas respostas eu vejo. Este é meu, e acho útil se você estiver trabalhando no Mac.
Tenho certeza de que você sabe que existem alguns arquivos "bundle" ( .app , .rtfd , .workflow e assim por diante). E olhando para a janela do Finder, eles parecem arquivos únicos. Mas eles não são. E
$ ls
ou$ find
vê-los como diretórios ... Portanto, a menos que você precise listar o conteúdo deles, isso funciona para mim:Claro que isso é para o diretório que está funcionando e você pode adicionar extensões de outros pacotes (mas sempre com um
/
depois deles). Ou quaisquer outras extensões, se não o pacote, sem o/
.Bastante interessante o "
.lpdf/
" (pdf multilíngue). Tem.pdf
extensão " " normal (!!) ou nenhuma no Finder. Dessa forma, você obtém (ou conta apenas 1 arquivo) por issopdf
e não um monte de coisas…fonte
ls -lR
é o que você estava procurando, ou pelo menos eu estava. Felicidadesfonte
ls -lR
não atingiria esse objetivo.Se o diretório for passado como um caminho relativo e você precisará convertê-lo em um caminho absoluto antes de chamar find. No exemplo a seguir, o diretório é passado como o primeiro parâmetro para o script:
fonte
readlink
você pode fazerdirectory=$(readlink -e $1)
readlink
no OS X 10.5.8 não suporta a opção -e.Isso é lento, mas funciona recursivamente e imprime diretórios e arquivos. Você pode canalizá-lo com o awk / grep se quiser apenas os nomes dos arquivos sem todas as outras informações / diretórios:
fonte
@ ghostdog74: Pequenos ajustes na sua solução.
O código a seguir pode ser usado para pesquisar arquivos com seu caminho absoluto completo.
fonte
Eu sabia o nome do arquivo, mas também queria o diretório.
encontre $ PWD | nome do arquivo fgrep
funcionou perfeitamente no Mac OS 10.12.1
fonte