Incapaz de desarmar um arquivo?
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
.
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
)