Como listar todos os arquivos em uma árvore (um diretório e seus subdiretórios)?

41

Para uma tarefa minha, preciso listar todos os arquivos em uma árvore (um diretório, todos os seus subdiretórios, todos os subdiretórios, etc.).

Eu preferiria vê-los no Nautilus ou Krusader, mas uma solução de linha de comando também é interessante (nesse caso, precisarei que os nomes dos arquivos, tamanhos e tempos de modificação sejam listados).

Ivan
fonte
Esta questão tem um terrível monte de pontos de vista. Talvez você possa aceitar a resposta que achou mais útil, para poupar aos outros algum tempo @Ivan?
Starbeamrainbowlabs

Respostas:

39

árvore será muito conveniente para você.

sudo apt-get install tree

usando tree filepathpara listar os arquivos.

kit.yang
fonte
27
ls -alR

Esse é provavelmente o método mais simples. Estou apenas cortando um script de localização para dar um toque a mais controle.

Oli
fonte
7
Ou apenas ls -Rse você não quiser todos os detalhes.
Matthew
11
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

Você pode jogar com a formatação printf quantas vezes quiser. Isso oferece uma ótima oportunidade para que as coisas sejam formatadas da maneira que você precisa, o que é inestimável se você estiver usando a saída em outro aplicativo.

Mais: http://linux.about.com/od/commands/l/blcmdl1_find.htm

Para melhor legibilidade, você pode canalizar tudo através do columncomando e ele redimensionará automaticamente as coisas para que elas se alinhem.

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t
Oli
fonte
4

Como Oli respondeu, findpermitirá pesquisar uma árvore de diretórios inteira:

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

# Where %TY will display the mod. time year as 4 digits
#       %Tm will display the mod. time month as 2 digits
#       %Td will display the mod. time day as 2 digits
#       %s displays the file size in bytes
#       %p displays the full path name of the file

Você também pode usar a -type fopção para limitar os resultados a apenas arquivos. Se você deseja corresponder a um padrão de arquivo, deseja as opções -nameou -iname(distinção entre maiúsculas e minúsculas e maiúsculas e minúsculas, respectivamente). Faça uma leitura da findpágina de manual - há uma quantidade substancial de opções que você pode usar para restringir / refinar sua pesquisa.

E, além disso, se você espera que várias telas de dados sejam devolvidas a você, lembre-se de canalizar seus resultados less.

@ Oli: +1 Acabei de aprender algo novo - column. Não tinha usado isso antes.

Vai
fonte
3

lsé o comando padrão para listar arquivos no Ubuntu e outros sistemas operacionais Linux e Unix. lsé particularmente útil para aprender, porque você o encontrará instalado em todos os sistemas Unix que encontrar. Por padrão, executar isso exibe apenas os arquivos no diretório atual.

No entanto, a -R'flag' é a opção recursiva (observe R maiúsculo , não r ) que também mostrará todos os subdiretórios.

Você pediu "detalhes" também - para isso, você quer a -lbandeira (é um L minúsculo, não o número um). Esteja ciente de que isso fornece informações sobre permissões de arquivo, além de tamanho, informações de hora / data e nome do arquivo.

Se você também quiser mostrar arquivos / pastas ocultos (o equivalente a Ctrl+ Hno Nautilus), adicione o -asinalizador 'all'.

Você pode mesclar sinalizadores para fornecer algo como:

ls -lR

Se você executar isso em qualquer pasta de tamanho decente, verá que isso produz uma enorme saída longa que rola sua tela muito rapidamente. Para contornar isso, você pode 'canalizar' a saída lsatravés de um programa chamado less(o nome é uma paródia do similar moreque existia primeiro, mas possui mais recursos).

ls -lR | less

Isso permitirá que você use as teclas de seta para cima / para baixo, ao lado de PageUp / Down para passar pela saída em uma velocidade mais confortável.

8128
fonte
0

Usando o Krusader:

  1. Use a Pesquisa (Ctl-S).
  2. Marque a opção "pesquisar em subdiretórios".
  3. Clique em "Pesquisar".
  4. Quando a pesquisa terminar, clique em "Feed to listbox".

Isso permitirá que você processe todo o lote arrastando para o outro painel etc.

Frank Z.
fonte
0

Que tal um script do Nautilus ?

#!/bin/bash
#
# AUTHOR:       (c) 2013 Glutanimate (https://askubuntu.com/users/81372)
# NAME:         DirTree 0.1
# DEPENDENCIES: zenity tree  (install with sudo apt-get install zenity tree)
# LICENSE:      GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
#
# DESCRIPTION:  Creates a directory tree at the current location. If you want you
#               can filter the output by a pattern (e.g. *.avi to only include avi
#               files).

TITLE=DirTree

# Get working directory
WORKINGDIR="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"

# Time and date
TIME=$(date +"%Y-%m-%d_%H%M%S")

# Filter pattern
zenity --question --title "$TITLE" --text "Do you want to filter by a specific file pattern?"

if [ "$?" = "1" ]
  then
      customtree="tree"
  else
      PATTERN=$(zenity --entry --title "$TITLE" --text="Please enter a file pattern (e.g. *.avi)")

         if [ -z "$PATTERN" ]
           then
               exit
           else
               customtree="tree -P $PATTERN"               
         fi

fi

# Directory tree
$customtree "$WORKINGDIR" > "$WORKINGDIR/directorytree_$TIME.txt"

Instruções de instalação: Como instalar um script do Nautilus?

Glutanimado
fonte
0

Eu criei um programa especialmente para isso - instantâneo de diretório .
Ele itera recursivamente por um diretório e armazena os nomes e tamanhos de todos os arquivos e pastas encontrados em arquivos HTML bem estruturados, que possuem uma organização semelhante à do diretório de entrada.
Em outras palavras, isso pode ser pensado como uma versão com hiperlink dos comandos dir /sou tree /f.

Anmol Singh Jaggi
fonte
Você escreveu dire treecom opções no estilo DOS, então tenho que perguntar, isso funcionará no Ubuntu?
wjandrea
Sim, na verdade eu agendei para rodar na minha instalação do Ubuntu todo fim de semana. Embora seja desenvolvido usando C ++ e Boost, será um pouco difícil compilar e criar um binário. É por isso que estou no processo de portá-lo para Python. De qualquer forma, posso lhe dar o binário pré-compilado, se quiser.
Anmol Singh Jaggi
0

Nautilus

  1. Ativar subpastas em expansão na exibição de lista
    • Para 14.04 e 16.04, veja aqui
    • Para 17.10 e 18.04, veja aqui
  2. Clique em uma pasta e pressione asterisco ( *no teclado numérico ou Shift+ 8) para expandir um nível de subdiretórios. Cada vez que você pressionar o asterisco, ele expandirá o próximo nível.

Isso também funciona no Nemo.

wjandrea
fonte
-1

você pode colocá-los no seu arquivo .bashrc

function _get_tree(){ ls -alR | while read LINE; do   echo $LINE | grep ":$" > /dev/null;   if [ $? -eq 0 ];   then     VAR=$(echo $LINE | grep ":$"| sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/' | tee /dev/tty);   fi;   echo $LINE | grep "^-" > /dev/null;   if [ $? -eq 0 ];   then     size=${#VAR};     for i in $(eval echo "{1..$size}"); do echo -n ' '; done;     echo -n '..';     echo $LINE | cut -d ' ' -f9;   fi; done; };

alias get_tree='_get_tree'

Agora, você pode usar o comando get_tree dentro de qualquer diretório e ele exibirá toda a hierarquia.

Sintaxe:

$ get_tree

Saída de amostra:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

Espero que isto ajude !!

Nitish Srivastava
fonte
Não vai ajudar a menos que você explicar o que você está fazendo ..
Ron
-1 Formatação incorreta do código, explicação insuficiente. E por que você cria um apelido?
wjandrea