Questão Fazendo a saída ls como dir / b / s


Como posso ajustar a saída de ls no Linux para que pareça com a saída do comando dir /b /s no Windows?

dir /b /s saída da seguinte forma:

C:\MinGW>dir /s /b 
C:\MinGW\COPYING 
C:\MinGW\COPYING.LIB
C:\MinGW\doc 
C:\MinGW\include

4


origem




Respostas:


find . -print

Isso deve produzir o mesmo resultado dir /s/b


5



Não é bem assim. Os caminhos são exibidos em relação a ., não /. find BACKTICKpwdBACKTICK -print podia funcionar. Mas isso é um pouco mais complicado do que apenas usar ls e eu não acho que a conformidade exata dirO formato de saída é um requisito estrito. - sepp2k
@ sepp2k: Dada a sua última frase, estou confuso porque você aponta o primeiro. Encontrar é uma ferramenta geralmente muito mais útil do que ls para casos semelhantes a este.
@jrtokarz: Você não precisa do ponto ou -print, eles são o padrão, então apenas "encontre".
@ Roger: Eu acredito que o caminho de busca é necessário na maioria find versões (exceto GNU). - grawity


ls -R lista todos os arquivos e subdiretórios recursivamente. Com ls -R1 você obtém o mesmo, mas apenas um arquivo por linha.

Nem faz a saída parecer exatamente como aquela de dir /b /s, mas deve estar perto o suficiente.


2





ls -1

ou

ls -1d "$PWD"/*

2



/S é o equivalente do dir -R mesmo que a saída de exemplo do OP não torne isso claro. - sepp2k
ls -1 não funciona de forma recursiva (conforme necessário). ls -1R funcionaria de forma recursiva, mas sua saída pareceria bem diferente dir /s /b (que mostra os caminhos absolutos para cada arquivo). ls -1d "${PWD}/* também perde duas coisas: a recursão e correspondência de arquivos normais -d limita a saída apenas a diretórios). - - Kurt Pfeifle


Depende, quão difícil é a exigência de obter "equivalência" para dir /b /s... Esses vêm muito perto (eles não terão barras invertidas como separador de diretório, e a ordem de saída será um pouco diferente [dir /b /s emite diretórios de irmãos antes de mergulhar em cada um para mostrar seu conteúdo). O segundo é apenas um substituto no caso de sua versão find não padrão para -print ação (a maioria faz embora):

find $(pwd)
find $(pwd) -print

ATUALIZAR: Eu tive um erro de digitação nos comandos acima originalmente. Eu digitei chaves "{}" em vez de as redondas "()" como elas deveriam ser. Graças a Grawity para detectar isso.


1



Está $PWDem maiúsculas. - grawity
@grawity: você está certo e errado ao mesmo tempo. $PWD ou ${PWD} retornaria o conteúdo de um variável de ambiente (o diretório atual). Isso é o que você tem em mente. pwd é um pequeno utilitário de linha de comando ('print working directory') que também mostra o caminho atual do diretório. Usando-o como ${pwd} ou como `pwd` retornaria o resultado desse comando, que neste caso tem o mesmo efeito que usar $PWD. Então minha versão definitivamente funcionará, e seu comentário não foi apropriado neste contexto. - Kurt Pfeifle
Correção: $(pwd) retorna a saída de pwde ${pwd} retorna o valor de $pwd. Observe a diferença entre parênteses. - grawity
@grawity: D'oh! Você está certo, claro. (Eu faço certo sempre que preciso fazer isso em uma concha. O céu sabe por que eu fiz errado ao digitá-lo no campo de edição de texto ....) Eu vou corrigir meus comentários para que não confunda os outros leitores. - Kurt Pfeifle


isso parece funcionar, na linha de comando:

find|awk "/^\.\//{print\"$PWD\"substr(\$0,2)}"

1



Por que você não apenas usaria -printf em vez de? - Ignacio Vazquez-Abrams
Porque eu sou novo e faço as coisas da maneira mais difícil. Eu adicionei esta linha ao meu .bashrc o que parece fazer o truque: alias lsb='find . -printf "$PWD/%P\n"' É isto que você quer dizer? Obrigado pela dica! - erik