una sacar listar listado imprimir hacer generar directorios crear como carpetas carpeta archivos arbol language-agnostic filesystems directory-traversal

language agnostic - sacar - ¿Cuáles son todas las formas de atravesar árboles de directorios?



listar archivos de una carpeta windows 10 (7)

¿Cómo se recorre un árbol de directorios en su idioma favorito?

¿Qué necesita saber para recorrer un árbol de directorios en diferentes sistemas operativos? En diferentes sistemas de archivos?

¿Cuál es tu biblioteca / módulo favorito para ayudar a atravesar un árbol de directorios?


En C # :

Stack<DirectoryInfo> dirs = new Stack<DirectoryInfo>(); dirs.Push(new DirectoryInfo("C://")); while (dirs.Count > 0) { DirectoryInfo current = dirs.Pop(); // Do something with ''current'' (if you want) Array.ForEach(current.GetFiles(), delegate(FileInfo f) { // Do something with ''f'' }); Array.ForEach(current.GetDirectories(), delegate(DirectoryInfo d) { dirs.Push(d); }); }


En Java :

La recursividad es útil aquí. Lo que sigue es un fragmento de código de Java que ha estado presente en Internet durante siglos. No estoy seguro de quién merece el crédito por ello.

// Process all files and directories under dir public static void visitAllDirsAndFiles(File dir) { process(dir); //do something useful with the file or dir if (dir.isDirectory()) { String[] children = dir.list(); for (int i=0; i<children.length; i++) { visitAllDirsAndFiles(new File(dir, children[i])); } } }


En Python :

Si está buscando una solución rápida, limpia y portátil, intente:

import os base_dir = ''.'' def foo(arg, curr_dir, files): print curr_dir print files os.path.walk(base_dir, foo, None)

Tenga en cuenta que puede modificar foo para hacer otra cosa en lugar de solo imprimir los nombres. Además, si está interesado en migrar a Python 3.0, deberá usar os.walk () en su lugar.


mmmm, C # con una dosis de recursión .....

public static List<string> CrawlPath(string path, bool IncludeSubFolders) { List<string> fileList = new List<string>(); try { Stack<string> filez = new Stack<string>(Directory.GetFiles(path)); while (filez.Count > 0) { fileList.Add(filez.Pop()); } if (IncludeSubFolders) { filez = new Stack<string>(Directory.GetDirectories(path)); while (filez.Count > 0) { string curDir = filez.Pop(); fileList.AddRange(CrawlPath(curDir, IncludeSubFolders)); } } } catch (System.Exception err) { Console.WriteLine("Error: " + err.Message); } return fileList; }


En Linux con herramientas GNU

find -print0 | xargs -0 md5sum

o

find -print0 | xargs -0 -iASD echo ''this file "ASD" should be dealt with lile this (ASD)''


intento:

#!/bin/bash function walk_tree { echo "Directory: $1" local directory="$1" local i for i in "$directory"/*; do echo "File: $i" if [ "$i" = . -o "$i" = .. ]; then continue elif [ -d "$i" ]; then # Process directory and / or walk-down into directory # add command here to process all files in directory (i.e. ls -l "$i/"*) walk_tree "$i" # DO NOT COMMENT OUT THIS LINE!! else continue # replace continue to process individual file (i.e. echo "$i") fi done } walk_tree $HOME

(adaptado de http://ubuntuforums.org/showthread.php?t=886272 Comentario # 4)


C ++

#include <utility> #include <boost/filesystem.hpp> #include <boost/foreach.hpp> #define foreach BOOST_FOREACH namespace fs = boost::filesystem; fs::recursive_directory_iterator it(top), eod; foreach (fs::path const & p, std::make_pair(it, eod)) { if (is_directory(p)) { ... } else if (is_regular_file(p)) { ... } else if (is_symlink(p)) { ... } }