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