Como posso especificar que a ondulação (via linha de comando) substitui um arquivo se ele já existe?

11

Estou usando curl nesta sintaxe:

curl -o myfile.jpg http://mysite.com/myfile.jpg

Se eu executar este comando duas vezes, obtenho dois arquivos:

myfile.jpg
myfile-1.jpg

Como posso dizer ao CURL que quero substituir o arquivo, se ele existir?

cwd
fonte
4
Não é possível reproduzir: qual curlversão em que sistema?
enzotib 28/08

Respostas:

21

Usar:

curl http://mysite.com/myfile.jpg > myfile.jpg
cjc
fonte
2
E antes, verifique se você não tem a noclobberopção ativada ( set +o noclobber).
rozcietrzewiacz
0

Encontrei o mesmo problema e desejo reutilizar o mesmo nome de arquivo, independentemente do servidor, no seu caso, você pode obter o nome de arquivo basename

➸ basename 'http://mysite.com/myfile.jpg'
myfile.jpg

então você pode escrever uma função auxiliar bash como:

➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://mysite.com/myfile.jpg'

mas, no meu caso, o nome do arquivo nem faz parte do URL, ele vem com a disposição do conteúdo; com enrolar a linha de comando é

$ curl -fSL -R -J -O 'http://some-site.com/getData.php?arg=1&arg2=...'

você pode ignorar o que -fSLele lida se o lado do servidor der redirecionamento 302; o -Rtimestamp do lado do servidor, -Jconsiderar o lado do servidor Content-Dispositione -Omudar para o comportamento de download em vez de descarregar no terminal;

no entanto, ele ainda se recusa a substituir se o nome do arquivo existir; Quero que ele sobrescreva se o Last-Modifiedregistro de data e hora do lado do servidor for mais recente;

acaba com uma solução wget capaz de:

$ wget -NS --content-disposition 'http://some-site.com/getData.php?arg=1&arg2=...'

o -Né verificar o tempo do servidor no selo e sobrescrever somente quando o servidor tiver uma nova versão; --content-dispositioné considerar Content-Dispositioncabeçalho; O comportamento padrão do wget é fazer o download, com o nome de arquivo fornecido no servidor.

no seu caso, se você não se importa com registro de data e hora, é apenas

$ wget -O myfile.jpg http://mysite.com/myfile.jpg
user5672998
fonte