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).


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.


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.


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

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.


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.


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.


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?


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.


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.


-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 !!


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.