Pergunta

Eu escrevi um shellscript que tenta puxar um arquivo alcalão de um servidor FTP e não o local. Preciso extrair arquivos específicos do arquivo alcatrão. O nome do arquivo do Tarfile contém uma data; Preciso ser capaz de selecionar um arquivo TAR com base nesta data.

abc_myfile_$date.tar é o formato do arquivo que estou retirando do servidor FTP.

Meu código atual se parece com o seguinte:

for host in ftpserver
do
ftp -inv host <<END_SCRIPT
user username password
prompt
cd remotepath
lcd localpath
mget *myfile_$date*.tar
quit
END_SCRIPT
done

for next in `ls localpath/*.tar`
do
tar xvf $next *required_file_in_tar_file*.dat
done

Quando eu corro o script, não consigo desperdiçar os arquivos

Consigo obter um único arquivo TAR do servidor FTP apenas se mencionar o nome exato desse arquivo. Eu gostaria de obter um arquivo que tenha myfile_$date em seu nome. Depois disso, gostaria de extraí -lo para um caminho local para obter os arquivos especificados nesse arquivo alcaturaco cujos nomes consistem no meu required_files.

Foi útil?

Solução

Você entendeu .tar arquivo, mas descomprimi -lo com z opção. Arquivos compactados (aqueles que exigem z) normalmente tem .tar.gz prefixo. Tentar

tar xvf $next *required_file_in_tar_file*.dat

Outras dicas

Em primeiro lugar, se você deseja usar curingas para o nome do arquivo que está recebendo do servidor, você precisa usar o MGET em vez de obter. A expansão do arquivo curinga (o *) não funciona para o comando get.
Depois de puxar o arquivo, a operação TAR funcionará como esperado, a maioria das versões modernas do Linux/BSD tem um alcatrão 'inteligente', que não precisa do comando 'Z' para especificar que o arquivo TAR está compactado - eles vão Descubra que o tarball é compactado por conta própria e descompacte -o automaticamente, fornecendo a ferramenta de compressão/descompressão apropriada está no sistema (BZIP2 para arquivos .jz, GZIP para arquivos .GZ).

Não tenho muita certeza, mas o protocolo FTP não tem um comando mget Se você deseja baixar vários arquivos? (ao invés de get)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top