Arquivos únicos
Para realizar "Se o arquivo x existir, baixe-o; caso contrário, baixe o arquivo y ", você pode fazer o seguinte:
wget x || wget y
Se x existir, ele será baixado e wget
retornará true
, portanto, a segunda parte será ignorada. Se x não existir, wget
retornará algum código de erro (provavelmente 8) e a segunda parte da expressão será avaliada (o que será feito em y ).
Recursivamente
Isso, obviamente, não ajudará muito no seu download recursivo. Eu ficaria surpreso se wget
tivesse as facilidades para acomodar o mascaramento com esse nível de sofisticação. A página man não parece cobrir qualquer forma de condicionais extravagantes. Uma abordagem ligeiramente modificada poderia funcionar, no entanto.
(Parece ser difícil convencer wget
a produzir uma lista de coisas que deseja baixar. Minha primeira idéia foi criar isso e filtrá-lo apropriadamente antes de fazer o download, muito parecido com o @utkuerd sugere.)
Um ponto de partida seria, naturalmente, baixar todos os arquivos ogg primeiro, presumivelmente por
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.ogg -i http://www.foo.com/folder/
Os arquivos mp3 restantes podem ser baixados pelo mesmo método, desde que você tenha uma máscara adequada para fornecer como uma lista --reject
. Esta lista deve conter o nome de cada arquivo mp3 que você não deseja baixar.
Supondo que eu sugiro que você crie esta lista da seguinte forma
bl=($(find ./ -name '*.ogg' -exec basename -s .ogg {} \+ | sed 's/\(^.\+$\)/.mp3/' ) )
Agora você tem uma matriz bash dos arquivos mp3 para bloquear.
Para baixar apenas os arquivos mp3 desbloqueados, você pode usar
IFS=','; wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.mp3 -R"${bl[*]}" -i http://www.foo.com/folder/; unset IFS
A variável IFS
deve ser modificada para que a lista não seja separada por espaços.
Obviamente, isso irá mal em vários graus se a lista de arquivos ogg for maior que getconf ARG_MAX
(ele quebrará o comando wget) ou os nomes de arquivos contiverem espaços em branco (isso quebrará a lista de bloqueio, potencialmente dando a você e arquivo extra e (improvável) um arquivo ausente). Ambos são consertáveis.
Observe que as vírgulas supérfluas na lista de rejeições fornecem resultados interessantes .
Escrita da excelente sugestão de Bob
(veja o comentário abaixo)
Depois de obter os arquivos ogg com
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.ogg -i http://www.foo.com/folder/
você pode criar arquivos mp3 fictícios, como
find ./ -name '*.ogg' | sed 's/ogg$/mp3/' | xargs -d '\n' touch
e obtenha os arquivos mp3 restantes com (explorando -nc
)
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.mp3 -i http://www.foo.com/folder/
Os arquivos mp3 supérfluos podem ser removidos com algo como
find ./ -name '*.mp3' -size 0 -exec rm '{}' \+
Eu testei que isso funciona com espaços nos nomes.