Como passar nomes de arquivos como variáveis ​​para um programa executável?

Como passar nomes de arquivos como variáveis ​​para um programa executável?

Esta deve ser uma pergunta relativamente simples. Estou tentando passar vários arquivos por meio de um programa executável em loop. Tentei várias estratégias (armazenamento em um array, etc.), mas o nome do arquivo não parece ser reconhecido como uma variável. O erro que estou recebendo é: Esse arquivo ou diretório não existe.

O esboço da minha última tentativa:

FILES=path/*/*

for f in $FILES
do
./function -input $f 
done

Estou trabalhando em um shell bash.

Responder1

Em vez de usar uma variável simples para armazenar uma sequência de expansão glob, recomendo usar uma matriz adequada e ativar a opção de globbing do shell globstarpara preencher arquivos em todos os subdiretórios

shopt -s globstar nullglob
file_list=(path/**/*)

e use um loop sobre a matriz para processar cada arquivo

for file in "${file_list[@]}"; do
    printf '%s\n' "$file"
    # Your other actions on file goes here
done

informação relacionada