¿Cómo enumerar todos los archivos en un árbol (un directorio y sus subdirectorios)?

41

Para una tarea mía, necesito enumerar todos los archivos en un árbol (un directorio, todos sus subdirectorios, todos los subdirectorios de esos, etc.).

Prefiero verlos en Nautilus o Krusader, pero una solución de línea de comandos también es interesante (en este caso necesitaré nombres completos de archivos, tamaños y tiempos de modificación para enumerarlos).

Ivan
fuente
Esta pregunta tiene una tremenda cantidad de vistas. ¿Quizás podría aceptar la respuesta que encontró más útil, para ahorrar tiempo a otros @Ivan?
starbeamrainbowlabs

Respuestas:

39

El árbol será muy conveniente para usted.

sudo apt-get install tree

usando tree filepathpara enumerar los archivos.

kit.yang
fuente
27
ls -alR

Ese es probablemente el método más simple. Solo estoy pirateando un script de búsqueda para darle un toque más de control.

Oli
fuente
77
O simplemente ls -Rsi no quieres todos los detalles.
Mateo
11
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

Puedes jugar con el formato printf tanto como quieras. Esto le brinda una gran oportunidad para formatear las cosas de la manera que las necesita, lo cual es invaluable si está utilizando la salida en otra aplicación.

Más: http://linux.about.com/od/commands/l/blcmdl1_find.htm

Para una mejor legibilidad, puede canalizar todo a través del columncomando y redimensionará automáticamente las cosas para que se alineen.

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

Como respondió Oli, findle permitirá buscar en un árbol de directorios completo:

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

También es posible que desee utilizar la -type fopción para limitar los resultados a solo archivos. Si desea hacer coincidir un patrón de archivo, desea las opciones -nameo -iname(coincidencia entre mayúsculas y minúsculas, respectivamente). Lea findla página de manual de lectura : hay una cantidad considerable de opciones que puede utilizar para limitar / refinar su búsqueda.

Y, por otro lado, si espera recibir múltiples pantallas de datos, recuerde canalizar sus resultados less.

@Oli: +1 Acabo de aprender algo nuevo también column. No había usado eso antes.

Será
fuente
3

lses el comando estándar para enumerar archivos en Ubuntu y otros sistemas operativos Linux y Unix. lses particularmente útil de aprender porque lo encontrarás instalado en todos los sistemas Unix que hayas conocido. De forma predeterminada, ejecuta esto solo muestra los archivos en el directorio actual.

Sin embargo, la -R'bandera' es la opción recursiva (tenga en cuenta la R mayúscula , no la r ) que también le mostrará todos los subdirectorios.

También solicitó "detalles", para esto desea la -lbandera (que es una L minúscula, no la número uno). Tenga en cuenta que esto le brinda información de permisos de archivos, así como el tamaño del archivo, la información de hora / fecha y el nombre del archivo.

Si también desea mostrar archivos / carpetas ocultos (el equivalente de Ctrl+ Hen Nautilus), agregue el -aindicador 'todos'.

Puede fusionar banderas juntas, para obtener algo como:

ls -lR

Si ejecuta esto en cualquier carpeta de tamaño decente, encontrará que esto produce una gran salida larga que se desplaza hacia abajo en su pantalla muy rápido. Para evitar esto, puede 'canalizar' la salida a lstravés de un programa llamado less(el nombre es una parodia de lo similar moreque existió primero pero que tiene más características).

ls -lR | less

Esto le permitirá usar las teclas de flecha arriba / abajo, junto con PageUp / Down para pasar por la salida a una velocidad más cómoda.

8128
fuente
0

Usando Krusader:

  1. Use Buscar (Ctl-S).
  2. Marque "buscar en subdirectorios".
  3. Haga clic en "Buscar".
  4. Cuando finalice la búsqueda, haga clic en "Feed to listbox".

Esto le permitirá procesar todo el lote arrastrándolo al otro panel, etc.

Frank Z.
fuente
0

¿Qué tal un script 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"

Instrucciones de instalación: ¿Cómo puedo instalar un script Nautilus?

Glutanimato
fuente
0

He creado un programa especialmente para esto: Instantánea de directorio .
Se itera recursivamente a través de un directorio y almacena los nombres y tamaños de todos los archivos y carpetas que encuentra en archivos HTML perfectamente estructurados, que tienen una organización similar a la del directorio de entrada.
En otras palabras, esto puede considerarse como una versión hipervinculada de los comandos dir /so tree /f.

Anmol Singh Jaggi
fuente
Escribiste diry treecon opciones de estilo DOS, así que tengo que preguntar, ¿funcionará esto en Ubuntu?
wjandrea
Sí, en realidad lo he programado para que se ejecute en mi instalación de Ubuntu todos los fines de semana. Sin embargo, está construido con C ++ y Boost, por lo que será un poco difícil compilar y crear un binario. Es por eso que estoy en el proceso de portarlo a Python. De todos modos, puedo darte el binario precompilado si quieres.
Anmol Singh Jaggi
0

Nautilo

  1. Habilitar subcarpetas expandibles en la vista de lista
    • Para 14.04 y 16.04, ver aquí
    • Para 17.10 y 18.04, ver aquí
  2. Haga clic en una carpeta y presione el asterisco ( *en el teclado numérico, o Shift+ 8) para expandir un nivel de subdirectorios. Cada vez que presione un asterisco, se expandirá al siguiente nivel.

Esto también funciona en Nemo.

wjandrea
fuente
-1

puedes ponerlos en tu archivo .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'

Ahora, puede usar el comando get_tree dentro de cualquier directorio y mostrará toda la jerarquía.

Sintaxis:

$ get_tree

Salida de muestra:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

Espero que esto ayude !!

Nitish Srivastava
fuente
No va a ayudar a menos que expliques lo que estás haciendo ...
Ron
-1 Formato de código deficiente, explicación insuficiente. ¿Y por qué haces un alias?
wjandrea