Sh Script usando ftp para colocar uma lista de arquivos

1

Então meu script se parece com algo assim:

#...
files="$(find $line/processed/* 2>/dev/null)" #2>/dev/null used for error output suppression
if [[ ! -z "$files" ]]
then
                    #put_list="put"
                    #for word in $files; do
                    #       put_list="$put_list"$' '"$word"
                    #done

                    put_list="put $files" 
                    rm_list="rm $files"
yafc ftp://[email protected]  <<**
$put_list
close
quit
**
#...

Então, se eu usá-lo assim, recebo um erro do yafc assim:

...
yafc 192.168.178.54:~/> No such command '/mnt/dir/processed/19,11,2014-14,17,25,,313', try 'help'
yafc 192.168.178.54:~/> No such command '/mnt/dir/processed/19,11,2014-14,17,41,,649"
...

Todos os arquivos estão listados aqui. Apenas o primeiro arquivo em $files foi colocado no host.

Mas se eu usar isso: (o que é comentado no código acima)

put_list="put"
for word in $files; do
     put_list="$put_list"$' '"$word"
done

Tudo funciona perfeitamente! Então qual é a diferença? Eu tentei usar tr para me livrar de '\n' . Se eu echo $put_list , em ambos os casos eles (parecem) ser idênticos. Não quero iterar mais de $ files porque às vezes há muitos dados, e isso levaria muito tempo.

Então, é possível fazer esse trabalho sem esse caro loop?

    
por Tschwen 19.11.2014 / 14:53

1 resposta

1

files=$(echo $line/processed/*)
yafc ftp://[email protected]  <<**
put $files
close
quit
**

O comando find separa os arquivos encontrados por novas linhas (um arquivo por linha). Como você não parece precisar da funcionalidade de localização, você pode usar files=$(echo $line/processed/*) .

O documento aqui expandido para

put file1
file2
file3
...

Quando você tentou o loop, não usou aspas para que as novas linhas fossem interpretadas como separadores de campo e, portanto, cada arquivo era separado pelo espaço adicionado.

Ao usar o simples files=$(echo $line/processed/*) $files agora só tem espaços entre os arquivos, então put $files deve fazer o que você quer.

    
por 19.11.2014 / 17:05