Отдельные файлы
Чтобы выполнить «Если файл x существует, загрузите его; в противном случае загрузите файл y », вы можете сделать следующее:
wget x || wget y
Если x существует, он загружается и wget
возвращается true
, поэтому вторая часть пропускается. Если x не существует, wget
возвращает некоторый код ошибки (вероятно, 8) и вычисляется вторая часть выражения (которая загружает y ).
Рекурсивный
Это, очевидно, не сильно поможет вам в вашей рекурсивной загрузке. Я был бы удивлен, если бы wget
имел средства для размещения маскировки с таким уровнем сложности. Страница справочника также не покрывает какие-либо необычные условия. Немного измененный подход может работать, хотя.
(Кажется, трудно убедить wget
составить список вещей, которые он хочет загрузить. Моя первая идея состояла в том, чтобы создать это и отфильтровать его соответствующим образом перед загрузкой, очень похоже на @utkuerd.)
Естественно, отправной точкой будет сначала загрузить все файлы ogg, предположительно
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.ogg -i http://www.foo.com/folder/
Остальные mp3-файлы могут быть загружены тем же способом, если у вас есть подходящая маска для представления в виде --reject
списка. Этот список должен содержать название каждого mp3-файла, который вы не хотите загружать.
Предполагая, что я предлагаю вам создать этот список следующим образом
bl=($(find ./ -name '*.ogg' -exec basename -s .ogg {} \+ | sed 's/\(^.\+$\)/\1.mp3/' ) )
Теперь у вас есть массив bash из mp3-файлов для блокировки.
Чтобы скачать только разблокированные mp3-файлы, вы можете использовать
IFS=','; wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.mp3 -R"$" -i http://www.foo.com/folder/; unset IFS
IFS
Переменная должна быть изменена таким образом, список не будет разделенных пробелами.
Очевидно, что это пойдет плохо в разной степени, если список файлов OGG длиннее getconf ARG_MAX
(это нарушит команду wget) или имена файлов содержат пробелы (это нарушит список блоков, потенциально предоставляя вам и дополнительный файл и (маловероятно) отсутствующий файл). Оба исправимы.
Обратите внимание, что лишние запятые в списке отклонений дают интересные результаты.
Рецензия на замечательное предложение @ Боба
(см. комментарий ниже)
После получения файлов OGG с
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.ogg -i http://www.foo.com/folder/
вы могли бы создать фиктивные mp3-файлы, как так
find ./ -name '*.ogg' | sed 's/ogg$/mp3/' | xargs -d '\n' touch
и получить оставшиеся файлы mp3 с помощью (эксплуатации -nc
)
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.mp3 -i http://www.foo.com/folder/
Лишние mp3-файлы могут быть удалены с помощью чего-то вроде
find ./ -name '*.mp3' -size 0 -exec rm '{}' \+
Я проверил, что это работает с пробелами в именах.