Quiero que mi script de shell visite todos los subdirectorios en un directorio principal. Haga algo en los directorios, envíe la salida a un archivo de cola y pase al siguiente directorio. Considere Main Dir = / tmp Sub Dir = ABCD (Cuatro subdirectorios)
bash
shell-script
Ashish
fuente
fuente
Respuestas:
Usa un
for
bucle:Busca solo los subdirectorios del directorio
/path/to/dir
. Tenga en cuenta que el ejemplo simple anterior fallará si los nombres de directorio contienen espacios en blanco o caracteres especiales. Un enfoque más seguro es:O en claro
bash
:(tenga en cuenta que, al contrario,
find
también se consideran enlaces simbólicos a directorios y se excluyen los ocultos)fuente
find
ese tipo.date +"%m%d20%Y"
| xargs echo echo $ ddate +"%m%d20%Y"
| xargs echo echo $ d El resultado esperado es ls -ltr de todo el subdirectorio . El bucle anterior no funcionaSoy un
bash
novato completo , pero veterano de UN * X. Aunque indudablemente esto se puede hacer en el script de shell Bash, en los viejos tiempos solíamosfind [-maxdepth <levels>] <start-dir> -exec <command> ;
lograr esto. ¡Podrías hacerman find
y jugar, tal vez hasta que alguien te diga cómo hacerlobash
!fuente
find
de comando.$(find...)
cosa es mala práctica .Parece que quiere los nombres de archivo debajo de cada subdirectorio; el
ls -l | awk
no es lo suficientemente robusta, por lo que si los nombres de archivo contienen espacios en blanco y / o saltos de línea? Lo siguientefind
funcionaría incluso parafind
aquellos que no tienen la posibilidad de hacerlo-maxdepth
:fuente
Tengo la solución El siguiente comando de búsqueda cumple mis requisitos.
fuente
También es posible usar ls, grep y tr
du / sed también se puede usar como selector si su ls carece de las opciones anteriores
Puede ser importante tener en cuenta que estos ejemplos devuelven directorios ocultos y excluyen directorios principales y actuales
fuente
ls
escribe un archivo por línea (lo que-1
especifica la opción) de forma predeterminada cuando la salida estándar es una tubería (por lo que es superfluo en sus respuestas). (2) Analizar la salida dels
es una mala idea: vea esto y esto . Su primera respuesta fallará si los directorios tienen espacios (o nuevas líneas) en sus nombres, y todos fallarán si tienen nuevas líneas en sus nombres. (3) Siempre debe citar las variables de shell (por ejemplo,"$dir"
) a menos que tenga una buena razón para no hacerlo y esté seguro de saber lo que está haciendo.