¿Cómo capturo la salida de los comandos ls o encuentro para almacenar todos los nombres de archivo en una matriz?

StackOverflow https://stackoverflow.com/questions/4678418

Pregunta

La necesidad de procesar archivos en un solo directorio actual a la vez. Busco una manera de tomar la salida de ls o find y almacenar el valor resultante como elementos de una matriz. De esta manera puedo manipular los elementos de la matriz, según sea necesario.

¿Fue útil?

Solución

Para responder a su pregunta exacta, utilice la siguiente:

arr=( $(find /path/to/toplevel/dir -type f) )

Ejemplo

$ find . -type f
./test1.txt
./test2.txt
./test3.txt
$ arr=( $(find . -type f) )
$ echo ${#arr[@]}
3
$ echo ${arr[@]}
./test1.txt ./test2.txt ./test3.txt
$ echo ${arr[0]}
./test1.txt

Sin embargo, si lo que desea es procesar archivos de uno en uno, puede find opción ya sea para uso de -exec si el guión es algo simple, o se puede hacer un bucle sobre lo que encontrar vuelve de esta manera:

while IFS= read -r -d $'\0' file; do
  # stuff with "$file" here
done < <(find /path/to/toplevel/dir -type f -print0)

Otros consejos

for i in `ls`; do echo $i; done;

No se puede conseguir más simple que eso!

editar: hmm - de acuerdo con el comentario de Dennis Williamson, parece que se puede

editar 2: aunque la OP pide específicamente la forma de analizar la salida de ls, sólo quería señalar que, como los comentaristas de abajo se han dicho, la respuesta correcta es "no". Uso for i in * o similar en lugar.

En realidad no es necesario el uso de ls / encontrar los archivos en el directorio actual.

Sólo tiene que utilizar un bucle for:

for files in *; do 
    if [ -f "$files" ]; then
        # do something
    fi
done

Y si quieres archivos ocultos del proceso también se puede establecer la opción relativa:

shopt -s dotglob

Este último comando funciona sólo en bash.

En función de lo que quiere hacer, podría utilizar xargs:

ls directory | xargs cp -v dir2

Por ejemplo. xargs actuarán en cada artículo devuelto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top