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, para enumerar solo directorios:
dir /ad /b /s
para listar todos los archivos (y ningún directorio):
dir /a-d /b /s
redirigir la salida a un archivo:
dir /a-d /b /s > filename.txt
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