Existe um equivalente ao tree
comando Ubuntu para Mac OS X?
Existe um equivalente ao tree
comando Ubuntu para Mac OS X?
Respostas:
Você também pode obter o tree
comando no macOS. Se você possui o Homebrew , tudo o que você precisa fazer é executar:
brew install tree
Continue lendo para obter detalhes.
Existem vários gerenciadores de pacotes para o macOS. Os mais populares são: Homebrew , MacPorts ou Fink . Você pode instalar qualquer um deles, mas eu recomendo o Homebrew. Não instale mais de um deles ao mesmo tempo!
Siga as instruções no site e execute um dos seguintes comandos, dependendo do gerenciador de pacotes que você escolheu.
Para Homebrew:
brew install tree
Para MacPorts:
sudo port install tree
Para o Fink:
fink install tree
Os gerenciadores de pacotes oferecem outros programas de linha de comando, incluindo os do GNU / Linux que não vêm com o macOS por padrão.
Primeiro, você deve instalar as ferramentas de linha de comando do Xcode executando xcode-select --install
.
Em seguida, baixe a tree
fonte . Em seguida, mudar o Makefile para fazê-lo funcionar , o que também é explicado em resposta de @ apuche abaixo . Comentar as opções do Linux e descomentar as opções do macOS deve ser suficiente.
Então corra ./configure
, então make
.
Agora você precisa mover o tree
arquivo binário para um local que esteja no seu caminho executável. Por exemplo:
sudo mkdir -p /usr/local/bin
sudo cp tree /usr/local/bin/tree
Agora edite seu ~/.bash_profile
para incluir:
export PATH="/usr/local/bin:$PATH"
Recarregue o shell e agora which tree
deve apontar para /usr/local/bin/tree
.
make
no OS X não funciona. Primeiro, você precisa saber como instalar as ferramentas de linha de comando do Xcode (ou, geralmente, ter alguma idéia sobre a criação de software) e, em seguida, descobrirá que há erros em um símbolo indefinido. Então você precisa fazer alguns ajustes no makefile (como explicado aqui ). IMO muito aborrecido.
./configure
e make
exatamente fazem e por que essas são necessárias em primeiro lugar. Ou eles não querem lidar com isso. Ou leia todos os arquivos de ajuda. Eles preferem fazer algo assim apt-get install
. Tudo bem se você preferir instalações da fonte (e eu também pessoalmente), mas você deve aceitar que existem soluções que são percebidas mais facilmente por outras pessoas, ou talvez até pela maioria dos usuários normais de computador.
./configure
e make
fazer. Só sei que são etapas que preciso executar para instalar o software. Li cegamente os arquivos README e INSTALL e faço o que diz.
grep
. Gosto tree | grep -v 'json'
ou similar.
Não é exatamente o mesmo, mas uma maneira rápida no Mac é:
find .
e é isso. Ele listará todos os caminhos de arquivo no diretório atual como uma lista.
find . -type f
find . -type d -maxdepth 2
funcionou para mim
find *
se você não quiser ver arquivos e diretórios ocultos. tree
não mostra arquivos e diretórios ocultos por padrão.
find
é uma ferramenta 万金油.
Ou se o administrador não vai deixar você instalar qualquer um dos brew
, fink
, port
ferramentas que você sempre pode construí-lo a partir da fonte:
curl -O ftp://mama.indstate.edu/linux/tree/tree-1.5.3.tgz
tar xzvf tree-1.5.3.tgz
cd tree-1.5.3/
ls -al
Edite o Makefile para comentar a parte do linux e descomentar a área osx:
# Linux defaults:
#CFLAGS=-ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
#CFLAGS=-O2 -Wall -fomit-frame-pointer -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
#LDFLAGS=-s
# Uncomment for OS X:
CC=cc
CFLAGS=-O2 -Wall -fomit-frame-pointer -no-cpp-precomp
LDFLAGS=
XOBJS=strverscmp.o
E enquanto você está nisso, se você deseja forçar a árvore a sempre colorir a saída, sempre pode editar o main
método do tree.c
arquivo e adicioná-lo force_color=TRUE;
antessetLocale(LC_TYPE,"");
Finalmente clique make
e você está pronto tree
para construir para o mac.
Homenagem vai para Shaun Chapman por seu post original em seu blog.
force_color = TRUE;
. Sem ponto e vírgula e você recebe um erro de compilação.
setLocale
sua setlocale
. Então tree.c
, você procura setlocale(LC_TYPE,"")
; e obrigado!
/bin
(ou algum caminho para que possa ser usado globalmente)?
warning: format specifies type 'long' but the argument has type 'long long'
. A correção foi alterar um especificador de formato de %9ld
para %9lld
.
Não existe um tree
comando formal em si, no entanto, você pode fazer isso:
Salve o seguinte script em / usr / local / bin / tree
#!/bin/bash
SEDMAGIC='s;[^/]*/;|____;g;s;____|; |;g'
if [ "$#" -gt 0 ] ; then
dirlist="$@"
else
dirlist="."
fi
for x in $dirlist; do
find "$x" -print | sed -e "$SEDMAGIC"
done
Altere as permissões para poder executá-lo:
chmod 755 /usr/local/bin/tree
Claro que você pode ter que criar /usr/local/bin
:
sudo mkdir -p /usr/local/bin/tree
tree
, mas ainda é uma pequena e agradável solução.
Encontrei uma solução simples aqui: http://murphymac.com/tree-command-for-mac/
Assim, adicionando o seguinte ao seu .bashrc
, .bash_profile
ou em qualquer outro lugar vai fazer o trabalho:
alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
Agora, adicionar um tree
comando será impresso assim:
# ~/my-html-app [13:03:45]$ tree
.
|____app.js
|____css
| |____main.css
| |____theme.css
|____index.html
Adicionando um pequeno ponto à resposta do @ apuche para o recurso sem raiz OSX El Capitan . make install
falha, pois não temos permissão para gravar no /usr/bin
diretório.
vikas@MBP:~/Downloads/tree-1.7.0$ sudo make install
Password:
install -d /usr/bin
install: chmod 755 /usr/bin: Operation not permitted
install -d /usr/share/man/man1
if [ -e tree ]; then \
install tree /usr/bin/tree; \
fi
install: /usr/bin/tree: Operation not permitted
make: *** [install] Error 71
vikas@MBP:~/Downloads/tree-1.7.0$
Para superar isso, basta editar Makefile
a terprefix = /usr/local
./configure --prefix=/usr/local
antes da execução make
e make install
obteria os mesmos resultados.
prefix
em tais cenários. Mas não há nenhum configure
arquivo na versão mais recente da árvore (1.7.0) agora. O INSTALL
arquivo no diretório descompactado apenas diz para usar make
e make install
imediatamente.
Adicionei o seguinte ao ~ / .bash_profile para uso no Terminal.app. Alguns comentários estão incluídos para ajudar a lembrar como a descoberta está sendo usada.
##########
## tree ##
##########
## example ...
#|____Cycles
#| |____.DS_Store
#| |____CyclesCards.json
#| |____Carbon
#| | |____Carbon.json
# alternate: alias tree='find . -print | sed -e "s;[^/]*/;|____;g;s;____|; |;g"'
# use$ tree ; tree . ; tree [some-folder-path]
function tree {
find ${1:-.} -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
}
exemplo para o diretório atual
$> tree
exemplo para algum caminho
$> tree /some/path
Aqui está uma solução de script Ruby que produz uma boa árvore Unicode junto com metadados úteis.
#!/usr/bin/env ruby
def tree_hierarchy( root, &children )
queue = [[root,"",true]]
[].tap do |results|
until queue.empty?
item,indent,last = queue.pop
kids = children[item]
extra = indent.empty? ? '' : last ? '└╴' : '├╴'
results << [ indent+extra, item ]
results << [ indent, nil ] if last and kids.empty?
indent += last ? ' ' : '│ '
parts = kids.map{ |k| [k,indent,false] }.reverse
parts.first[2] = true unless parts.empty?
queue.concat parts
end
end
end
def tree(dir)
cols = tree_hierarchy(File.expand_path(dir)) do |d|
File.directory?(d) ? Dir.chdir(d){ Dir['*'].map(&File.method(:expand_path)) } : []
end.map do |indent,path|
if path
file = File.basename(path) + File.directory?(path) ? '/' : ''
meta = `ls -lhd "#{path}"`.split(/\s+/)
[ [indent,file].join, meta[0], meta[4], "%s %-2s %s" % meta[5..7] ]
else
[indent]
end
end
maxs = cols.first.zip(*(cols[1..-1])).map{ |c| c.compact.map(&:length).max }
tmpl = maxs.map.with_index{ |n,i| "%#{'-' if cols[0][i][/^\D/]}#{n}s" }.join(' ')
cols.map{ |a| a.length==1 ? a.first : tmpl % a }
end
puts tree(ARGV.first || ".") if __FILE__==$0
Você pode modificar a meta = …
linha para extrair diferentes metadados a serem exibidos, escolhendo manualmente as partes divididas na próxima linha. Com um pouco mais de trabalho, você pode passar argumentos ls arbitrários para selecionar os metadados a serem exibidos.
Saída de amostra (parece melhor no terminal OS X do que a fonte no Stack Overflow):
phrogz$ tree UCC_IVI/
UCC_IVI/ drwxr-xr-x 510B Nov 20 11:07
├╴docs/ drwxr-xr-x 102B Nov 20 19:21
│ └╴CANMessages.txt -rwxr-xr-x 2.2K Nov 20 19:21
│
├╴effects/ drwxr-xr-x 204B Nov 19 17:19
│ ├╴Depth Of Field HQ Blur.effect -rwxr-xr-x 2.4K Nov 19 17:19
│ ├╴FXAA.effect -rwxr-xr-x 1.6K Nov 17 15:38
│ ├╴HDRBloomTonemap.effect -rwxr-xr-x 11K Nov 17 15:38
│ └╴SMAA1X.effect -rwxr-xr-x 4.4K Nov 19 17:19
│
├╴fonts/ drwxr-xr-x 136B Nov 17 15:38
│ ├╴Arimo-Regular.ttf -rwxr-xr-x 43K Nov 17 15:38
│ └╴OFL.txt -rwxr-xr-x 4.3K Nov 17 15:38
│
├╴maps/ drwxr-xr-x 238B Nov 19 17:19
│ ├╴alpha-maps/ drwxr-xr-x 136B Nov 17 15:38
│ │ ├╴rounded-boxes-3.png -rwxr-xr-x 3.6K Nov 17 15:38
│ │ └╴splatter-1.png -rwxr-xr-x 35K Nov 17 15:38
│ │
│ ├╴effects/ drwxr-xr-x 136B Nov 19 17:19
│ │ ├╴AreaTex-yflipped.dds -rwxr-xr-x 175K Nov 19 17:19
│ │ └╴SearchTex-yflipped.png -rwxr-xr-x 180B Nov 19 17:19
│ │
│ ├╴IBL/ drwxr-xr-x 136B Nov 17 15:38
│ │ ├╴028-hangar.hdr -rwxr-xr-x 1.5M Nov 17 15:38
│ │ └╴FieldAirport.hdr -rwxr-xr-x 1.5M Nov 17 15:38
│ │
│ ├╴icons/ drwxr-xr-x 238B Nov 19 17:19
│ │ ├╴icon_climate.dds -rwxr-xr-x 683K Nov 19 17:19
│ │ ├╴icon_music.dds -rwxr-xr-x 683K Nov 19 17:19
│ │ ├╴icon_navigation.dds -rwxr-xr-x 683K Nov 19 17:19
│ │ ├╴icon_phone.dds -rwxr-xr-x 683K Nov 19 17:19
│ │ └╴icon_surroundView.dds -rwxr-xr-x 683K Nov 19 17:19
│ │
│ └╴materials/ drwxr-xr-x 102B Nov 19 17:19
│ └╴spherical_checker.png -rwxr-xr-x 11K Nov 19 17:19
│
├╴materials/ drwxr-xr-x 102B Nov 19 17:19
│ └╴thin_glass_refractive.material -rwxr-xr-x 6.0K Nov 19 17:19
│
├╴models/ drwxr-xr-x 136B Nov 19 17:19
│ ├╴BokehParticle/ drwxr-xr-x 136B Nov 19 17:19
│ │ ├╴BokehParticle.import -rwxr-xr-x 739B Nov 19 17:19
│ │ └╴meshes/ drwxr-xr-x 102B Nov 19 17:19
│ │ └╴Mesh.mesh -rwxr-xr-x 1.1K Nov 19 17:19
│ │
│ └╴Glass_Button/ drwxr-xr-x 136B Nov 19 17:19
│ ├╴Glass_Button.import -rwxr-xr-x 1.2K Nov 19 17:19
│ └╴meshes/ drwxr-xr-x 136B Nov 19 17:19
│ ├╴GlassButton.mesh -rwxr-xr-x 44K Nov 19 17:19
│ └╴Icon.mesh -rwxr-xr-x 1.8K Nov 19 17:19
│
├╴scripts/ drwxr-xr-x 204B Nov 19 17:19
│ ├╴App.lua -rwxr-xr-x 764B Nov 17 15:38
│ ├╴CANSim.lua -rwxr-xr-x 29K Nov 17 15:38
│ ├╴ObjectWiggler.lua -rwxr-xr-x 3.7K Nov 19 17:19
│ └╴PathWiggler.lua -rwxr-xr-x 2.9K Nov 17 15:38
│
├╴states/ drwxr-xr-x 170B Nov 19 18:45
│ ├╴app-camera.scxml -rwxr-xr-x 2.4K Nov 20 11:07
│ ├╴app-navigation.scxml -rwxr-xr-x 590B Nov 19 18:32
│ └╴logic.scxml -rwxr-xr-x 4.2K Nov 19 18:59
│
├╴tests/ drwxr-xr-x 102B Nov 17 15:38
│ └╴interface-navigation.scxml-test -rwxr-xr-x 83B Nov 17 15:38
│
├╴UCC_IVI.uia -rwxr-xr-x 630B Nov 19 17:32
├╴UCC_IVI.uia-user -rwxr-xr-x 832B Nov 20 17:22
├╴UCC_IVI.uip -rwxr-xr-x 1.5K Nov 17 15:38
└╴UCC_Menu.uip -rwxr-xr-x 33K Nov 19 17:19
Instalar o Xcode
Obter ferramentas de linha de comando
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install tree
Tarde do jogo, mas eu tinha a mesma pergunta. Devido a restrições no local de trabalho, não consegui instalar um pacote da fonte ou através de um gerenciador de pacotes de terceiros.
Esta é a minha implementação:
# Faux tree command in OS X
#####################################################################
# tree
# Recursive directory/file listing of present working directory
#
# tree /Users/foo/foo_dir
# Recursive directory/file listing of named directory, e.g foo_dir
#
# tree /System/Library/ 2
# Recursive directory/file listing of named directory,
# with-user defined depth of recursion, e.g. 2
#####################################################################
tree ()
{
[ -n "$2" ] && local depth="-maxdepth $2";
find "${1:-.}" ${depth} -print 2> /dev/null | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
}
Simplesmente adicione a função a /Users/foo/.profile
ou .bash_profile
e atualize o perfil com: source .profile
ou:source .bash_profile