Arquivo em lote se comando

0

Estou tentando criar um arquivo em lotes pela primeira vez. Isso será para baixar um arquivo que está sendo atualizado uma vez por semana com um novo ID. Este é o arquivo de lote que eu criei até agora -

@echo off
echo open SERVER> temp.txt
echo USERNAME>> temp.txt
echo PWD>> temp.txt
echo cd />> temp.txt
echo cd Events/_PPV_Barker>> temp.txt
echo binary>> temp.txt
echo get Barker*_480i.ts>> temp.txt 
ftp -s:temp.txt
del temp.txt

Eu sei que toda vez que o novo arquivo for carregado no servidor, o início do nome do arquivo será Barker e o nome do arquivo terminará em 480i.ts . Eu tentei * como mostrado acima, mas não funciona. Como posso usar o comando if para obter o arquivo com uma ID exclusiva toda vez? ou existe algum outro caminho além do comando if?

Qualquer ajuda será apreciada.

Obrigado

Keshav

    
por keshav birla 16.01.2017 / 23:21

4 respostas

1

Se eu entendi corretamente, há um novo arquivo cada vez que você acessa o servidor, mas você não sabe os detalhes do seu nome. O que eu não sei é se o arquivo é removido depois de baixá-lo, ou se você tem um número cada vez maior de arquivos e precisa escolher o mais recente.

No caso mais simples, existe apenas um arquivo, e aqui sua solução está quase correta: há uma mudança simples necessária, para substituir get por mget , quando o curinga * funcionará: -

echo mget Barker*_480i.ts>> temp.txt

Se houver muitos arquivos que correspondam a essa máscara de arquivo, você baixará um número cada vez maior de arquivos em cada acesso. Uma correção rápida e suja é manter os arquivos em seu diretório atual e torná-los somente leitura: você receberá muitos erros, mas o novo arquivo será descarregado e você não terá a sobrecarga de transferir os arquivos tenho anteriormente.

Se você tiver acesso total ao diretório remoto, poderá excluir, mover ou renomear o arquivo baixado no controle remoto, para que você tenha apenas um arquivo sempre que corresponder à máscara de arquivo.

Se você não puder fazer nada disso, precisará de duas chamadas ftp : a primeira receberá uma lista de diretórios do controle remoto, que você comparará com sua lista remota anterior, para que você possa em seguida, identifique o novo arquivo e construa uma segunda chamada ftp para recuperá-lo. Um arquivo em lote para fazer isso não será fácil de escrever, mas é possível - eu faço coisas assim quando estou processando arquivos da WebCam.

    
por 17.01.2017 / 00:09
1

Se você estiver disposto a colocar sua senha e nome de usuário no script (em texto simples!), então você não deve se importar em usá-los na própria linha de comando.

Se você mantiver cópias locais dos arquivos antigos depois de baixá-las, e não alterá-las, ou seus carimbos de data e hora, poderá eliminar toda a idéia do arquivo em lote usando wget para Windows e inclua a opção --timestamping . Isso irá comparar o tamanho e o registro de data e hora de arquivos locais com arquivos remotos, apenas baixando arquivos remotos quando um deles for diferente ou o arquivo local não existir. Como benefício adicional, se você perdeu atualizações anteriores, ele baixará todos os novos arquivos, não apenas o mais novo.

Sua linha de comando seria algo como isto:

'wget --ftp-user=<user> --ftp-password=<password> --timestamping ftp://example.com/Events/_PPV_Barker/Barker*_480i.ts'

Naturalmente, isso pressupõe que você tenha privilégios apropriados para instalar o wget e manter as cópias anteriores localmente.

    
por 17.01.2017 / 05:47
0

tente usar o:

mget
comando

. Eu olhei para cima e ele diz para obter vários arquivos.

    
por 16.01.2017 / 23:32
0

Outros programas / maneiras

Usar ftp não é seguro.
A versão segura do ftp é denominada ftps , ftp secure . Tente usá-lo em vez de ftp , se puder.

É sempre um bom exercício fazer seus próprios scripts, mas é melhor usar as ferramentas criadas para esse fim quando elas existirem. Como alternativas mais aconchegantes, você pode usar wget (veja abaixo) que não exigirá nenhum outro servidor instalado remotamente.

Como você tem acesso ao computador remoto se ele estiver instalado, também é possível usar rsync .
Se falhar, tente usar scp -p ou sftp aproveitando a chave ssh [ 4 ] .

Se você quiser ficar com ftp , use a opção mget que copiará cegamente todos os arquivos do diretório, mas defina antecipadamente o modo de transferência de arquivos para binário com o comando binary .

Wget

wget - O downloader de rede não interativo [ 1 , 2 ] . Você pode usar:

wget -S -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts" 

A opção -N é manter registros de data e hora e fazer download apenas de arquivos mais recentes que os locais.
A cota " pode ser necessária para evitar a expansão do shell no Linux.
Ele funciona sob o windows também (claro, com a versão do windows do programa).

Uma linha de comando mais completa no seu caso (e em apenas uma linha) deve ser:

wget -user=USERNAME -password=PASSWORD 
     -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts" 

É claro que é mais sábio evitar escrever senhas em sua linha de comando ou em scripts ... você pode simplesmente usar a opção autoexplicativa --ask-password .

Uma solução mais adequada no Linux é colocar as informações necessárias em um arquivo chamado .wgetrc . Deve ser fácil encontrar o nome equivalente na documentação do Windows

$ cat ~/.wgetrc
ftp_user=UsernameOnTheRemoteFTP
ftp_password=PasswordOnTheRemoteFTP
http_user=UsernameOnTheRemoteHTTP
http_password=PasswordOnTheRemoteHTTP

Você pode ler em wget --help ou em man wget :

-N, --timestamping don't re-retrieve files unless newer than local
-S, --server-response print server response.

--user=user
--password=password
Specify the username user and password password for both FTP and HTTP file retrieval. These parameters can be overridden using the --ftp-user and --ftp-password options for FTP connections and the --http-user and --http-password options for HTTP connections.

por 01.03.2017 / 08:38