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

37

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

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

    
por Ivan 30.11.2010 / 00:28

10 respostas

36

árvore será muito conveniente para você.

sudo apt-get install tree

usando tree filepath para listar os arquivos.

    
por kit.yang 30.11.2010 / 02:33
24
ls -alR

Esse é provavelmente o método mais simples. Eu só estou hackeando um script de busca para dar a você mais controle.

    
por Oli 30.11.2010 / 00:40
11
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

Você pode jogar com a formatação printf o quanto quiser. Isso oferece uma excelente 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: link

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

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t
    
por Oli 30.11.2010 / 00:57
4

Como Oli respondeu, find permitirá que você pesquise em 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 querer usar a opção -type f para limitar os resultados a apenas arquivos. Se você quiser corresponder a um padrão de arquivo, você deseja as opções -name ou -iname (correspondência sensível a maiúsculas e minúsculas, respectivamente). Leia a man page do find - 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 cheias de dados sejam jogadas de volta em você, lembre-se de enviar seus resultados por meio de less .

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

    
por Will 30.11.2010 / 06:05
3

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

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

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

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

Você pode mesclar sinalizadores juntos para fornecer algo como:

ls -lR

Se você executar isso em qualquer pasta de tamanho decente, descobrirá que isso produz uma grande saída longa que rola a tela rapidamente. Para contornar isso, você pode "canalizar" a saída de ls por meio de um programa chamado less (o nome é uma paródia do more semelhante, que estava por perto primeiro, mas tem mais recursos).

ls -lR | less

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

    
por 8128 30.11.2010 / 08:48
0

Usando o Krusader:

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

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

    
por Frank Z. 28.08.2013 / 07:23
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 posso instalar um script do Nautilus?

    
por Glutanimate 28.08.2013 / 08:01
0

Eu criei um programa especialmente para isso - Directory Snapshot .
Ele itera de maneira recursiva por meio de um diretório e armazena os nomes e tamanhos de todos os arquivos e pastas que encontra em arquivos HTML bem estruturados, que têm uma organização semelhante à do diretório de entrada. Em outras palavras, isso pode ser considerado uma versão com hiperlink do dir /s ou < Comandos href="https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/pt-br/tree.mspx?mfr=true"> tree /f .

    
por Anmol Singh Jaggi 06.03.2016 / 11:58
0

Nautilus

  1. Ativar subpastas em expansão na visualização de lista
  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ê pressiona o asterisco, ele expande o próximo nível.

Isso também funciona no Nemo.

    
por wjandrea 29.12.2017 / 00:36
-1

você pode colocá-los em 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 em qualquer diretório e exibir toda a hierarquia.

Sintaxe:

$ get_tree

Exemplo de saída:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

Espero que isso ajude !!

    
por Nitish Srivastava 21.07.2015 / 22:36