Tengo problemas para entender los conceptos básicos de Bash. Esto es lo que tengo hasta ahora:
#!/bin/bash
FILES="/home/john/my directory/*.txt"
for f in "${FILES}"
do
echo "${f}"
done
Todo lo que quiero hacer es enumerar todos los .txt
archivos en un for
bucle para poder hacer cosas con ellos. Pero el espacio en el my directory
y el asterisco en *.txt
simplemente no están jugando bien. Intenté usarlo con y sin comillas dobles, con y sin llaves en nombres de variables y todavía no puedo imprimir todos los .txt
archivos.
Esto es algo muy básico, pero todavía estoy luchando porque estoy cansado y no puedo pensar con claridad.
¿Qué estoy haciendo mal?
He podido aplicar con éxito la secuencia de comandos anterior si mis ARCHIVOS no tienen un espacio o un asterisco ... Tuve que experimentar con o sin comillas dobles y llaves para que funcione. Pero en el momento en que tengo ambos espacios y un asterisco, lo estropea todo.
for f in "$DIR"/*.txt
= finefor f in "$DIR/*.txt"
= breaksSi bien el uso de matrices como lo muestra John1024 tiene mucho más sentido, aquí también puede usar el operador split + glob (dejando una variable escalar sin comillas).
Como solo desea la parte global de ese operador, debe deshabilitar la parte dividida :
fuente
Lo que puede hacer es dejar solo los caracteres comodín fuera de las comillas.
Algo así como:
para un en "archivos con espacios" * ". Txt"
haga el
procesamiento
hecho
Si los comodines se expanden a espacios, entonces necesitará usar un enfoque de archivo por línea, como usar ls -l para generar la lista de archivos y use bash read para obtener cada archivo.
fuente
Cuando desee procesar en un conjunto de archivos, considere que, en su nombre, puede haber espacio u otro código de escape estará allí, por lo tanto, antes de comenzar su proceso,
for loop
ofind command
configure elIFS bash env variable
:fuente