recursive shell recursion directory-listing

shell - recursive - Recursivamente enumera todos los directorios y archivos



ls linux (7)

Bash / Linux Shell

Directorios:

find ./ -type d

Archivos:

find ./ -type f

Bash / Shell en un archivo

Directorios:

find ./ -type d > somefile.txt

Archivos:

find ./ -type f > somefile.txt

Me gustaría recibir el siguiente resultado.

Supongamos que la estructura de directorios en el sistema de archivos es así:

-dir1 -dir2 -file1 -file2 -dir3 -file3 -file4 -dir4 -file5 -dir5 -dir6 -dir7

El resultado del script debe ser como:

Directorios:

/dir1 /dir1/dir2 /dir1/dir2/dir3 /dir1/dir2/dir4 /dir1/dir5 /dir1/dir5/dir6 /dir1/dir5/dir7

Archivos:

/dir1 /dir1/dir2/file1 /dir1/dir2/file2 /dir1/dir2/dir3/file3 /dir1/dir2/dir3/file4 /dir1/dir2/dir4/file5 /dir1/dir5/dir6 /dir1/dir5/dir7

¿Podría decirme cómo mantener la salida de find . -type d find . -type d y find . -type f find . -type f en otro archivo?


En Linux, un simple

find . -printf ''%y %p/n''

le dará una lista de todos los elementos contenidos, con directorios y archivos mezclados. Puede guardar esta salida en un archivo temporal, luego extraer todas las líneas que comiencen con ''d''; esos serán los directorios. Las líneas que comienzan con ''f'' son archivos.



En Windows, puede hacerlo así, como la solución más flexible que le permite procesar nombres de directorios adicionales.

Utiliza FOR / R para ejecutar recursivamente comandos por lotes.

Mira este archivo por lotes.

@echo off SETLOCAL EnableDelayedExpansion SET N=0 for /R %%i in (.) do ( SET DIR=%%i ::put anything here, for instance the following code add dir numbers. SET /A N=!N!+1 echo !N! !DIR! )

De forma similar para archivos, puede agregar patrones como un conjunto en lugar de puntos, en su caso

(*.*)


Esta es una vieja pregunta, pero pensé que agregaría algo de todos modos.

DIR no recorre correctamente todos los árboles de directorios que desea, en particular los que están en C :. Simplemente se da por vencido debido a las diferentes protecciones.

ATTRIB funciona mucho mejor, porque encuentra más. (¿Por qué esta diferencia? ¿Por qué MS haría que una utilidad funcionara de una manera y otra funcionara diferente a este respecto? Maldita sea si lo sé). En mi experiencia, la manera más efectiva de manejar esto, aunque es un desafío, es obtener dos listas:

attrib / s / d C: />% TEMP% / C-with-directories.txt

attrib / s C: />% TEMP% / C-sin-directorios.txt

y obtener la diferencia entre ellos. Esa diferencia son los directorios en C: (excepto los que están demasiado bien ocultos). Para C: usualmente hago esto corriendo como administrador.


en shell:

find . -type d

da directorios del directorio de trabajo actual, y:

find . -type f

da archivos del directorio de trabajo actual.

Reemplazar por su directorio de interés.


En Windows:

dir / ad / b / s

dir / ad / b / s