Arquivo em lote se comando

Arquivo em lote se comando

Estou tentando criar um arquivo em lote pela primeira vez. Será para baixar um arquivo que será atualizado uma vez por semana com um novo ID. Este é o arquivo em lote que 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 um novo arquivo for carregado no servidor, o início do nome do arquivo será Barkere o nome do arquivo terminará com 480i.ts. Eu tentei * como mostrado acima, mas não funciona. Como posso usar o comando if para obter sempre o arquivo com um ID exclusivo? ou existe alguma outra maneira além do comando if?

Qualquer ajuda será apreciada.

Obrigado

Keshav

Responder1

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

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

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

Se houver muitos arquivos que correspondam a esta máscara de arquivo, você baixará um número crescente de arquivos em cada acesso. Uma soluçã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á baixado e você não terá a sobrecarga de transferir os arquivos que você deseja. obtivemos 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 de cada vez que corresponda à máscara de arquivo.

Se você não puder fazer nenhuma dessas coisas, você precisará de duas ftpchamadas: a primeira obterá uma lista de diretórios do controle remoto, que você comparará com sua lista remota anterior, para que possa identificar o novo arquivo e crie uma segunda ftpchamada para recuperá-la. 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.

Responder2

Se você deseja colocar sua senha e nome de usuário no script (em texto simples!), Não se importe de usá-los na própria linha de comando.

Se você mantiver cópias locais dos arquivos antigos após baixá-los e não alterá-los ou seus carimbos de data e hora, poderá eliminar toda a ideia do arquivo em lote usandowget para Windowse inclua a --timestampingopção. Isso comparará o tamanho e o carimbo de data/hora dos arquivos locais com os arquivos remotos, baixando apenas os arquivos remotos quando um deles for diferente ou o arquivo local não existir. Como um benefício adicional, se você perdeu as atualizações anteriores, todos os novos arquivos serão baixados, não apenas o mais recente.

Sua linha de comando ficaria mais ou menos assim:

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

Claro, isso pressupõe que você tenha os privilégios adequados para instalar o wget e que mantenha as cópias anteriores localmente.

Responder3

tente usar o:

mget

comando. Eu pesquisei e diz para obter vários arquivos.

Responder4

Outros programas/formas

Usar ftpnão é seguro.
A versão segura do FTP é chamada ftps,ftp seguro. Tente usá-lo em vez de ftp, se puder.

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

Como você tem acesso ao computador remoto, se ele estiver instalado, você pode usarrsynctambém.
Se errar tente usar scp -p, ou sftpaproveitando a chave ssh [4] .

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


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 carimbos de data e hora e baixar apenas arquivos mais recentes que os locais.
A cotação "pode ser necessária para evitar a expansão do shell no Linux.
Também funciona no Windows (é claro, com a versão Windows do programa).


Um mais completolinha de comandono seu caso (e em apenas uma linha) deveria ser:

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

Claro que é mais sensato evitar escrever senha no seulinha de comandoou 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 de wget --helpou de man wget:

-N, -- carimbo de data/hora não recupere arquivos, a menos que seja mais recente que o local
-S, --resposta do servidor resposta do servidor de impressão.

--usuário=usuário
--senha=senha
Especifique o nome de usuário e a senha para recuperação de arquivos FTP e HTTP. Esses parâmetros podem ser substituídos usando as opções --ftp-user e --ftp-password para conexões FTP e as opções --http-user e --http-password para conexões HTTP.


informação relacionada