Я сделал a ~/.bashrc
функционируйте для сохранения некоторых веб-каталогов в мой локальный диск. Это работает хорошо кроме некоторых нежелательных индексных файлов, который не присутствует в веб-сайте. Я использую его как
crwl http://ioccc.org/2013/cable3/
но это также получает некоторые файлы такой как index.html?C=D;O=A index.html?C=D;O=D index.html?C=M;O=A index.html?C=M;O=D index.html?C=N;O=A index.html?C=N;O=D index.html?C=S;O=A index.html?C=S;O=D
Полный список файлов:
kenn@kenn:~/experiment/crwl/ioccc.org/2013/cable3$ ls
bios index.html?C=D;O=A index.html?C=S;O=A screenshot_flightsim4.png
cable3.c index.html?C=D;O=D index.html?C=S;O=D screenshot_lotus123.png
fd.img index.html?C=M;O=A Makefile screenshot_qbasic.png
hint.html index.html?C=M;O=D runme screenshot_simcity.png
hint.text index.html?C=N;O=A sc-ioccc.terminal screenshot_win3_on_macosx.png
index.html index.html?C=N;O=D screenshot_autocad.png
Я хочу исключить те файлы при клонировании того каталога с wget
Есть ли любой wget
переключатель или прием для клонирования веб-каталога, как это?
Моя функция сценария в .bashrc
:
crwl() {
wget --tries=inf --timestamping --recursive --level=inf --convert-links --page-requisites --no-parent "$@"
}
Править: Я нашел два возможных обходных решения
1) Добавление -R index.html?*
флаг
2) Добавление -R =A,=D
флаг, который отклоняет index.html?C=D;O=A
файлы кроме index.html
Я не знаю, какой является надлежащим, но они оба кажутся небезопасными.
Попробуйте это после загрузки, если вы не хотите использовать механизм удаления wget или находитесь в системе, не поддерживающей эту опцию.
FIND=$($WHICH find)
PWD2=$($WHICH pwd)
SH=$($WHICH sh)
ECHO=$($WHICH echo)
LESS=$($WHICH less)
Команда:
$FIND "$($PWD2)" -regextype posix-egrep -type f -regex '^(.*?html\?C=[DNSM];O=[AD]) Если вы удовлетворены результатом, выполните следующее:
- Введите следующую команду (см. Ниже):
- Замените $ ECHO на $ RM в приведенной выше команде.
- Удалите трубу (|) и $ LESS, чтобы получить фактический результат.
(Я не несу ответственности за удаление всей файловой системы, следовательно, таким образом.)
RM=$($WHICH rm);export RM
$FIND "$($PWD2)" -regextype ... ;$RM -f -v "${xox}"' \;
Надеюсь, это поможет.
-exec "$SH" -c 'o="{}";$ECHO -f -v "${o}"' \; | $LESS
Если вы удовлетворены результатом, выполните следующее:
(Я не несу ответственности за удаление всей файловой системы, следовательно, таким образом.)
RM=$($WHICH rm);export RM
$FIND "$($PWD2)" -regextype ... ;$RM -f -v "${xox}"' \;
Надеюсь, это поможет.
Исключить файлы индексного вида, такие как те, которые имеют URL index.html?C=...
без исключения любого другого отчасти index.html*
файлы, существует действительно более точная возможная спецификация. Попробуйте: -R '\?C='
Настройте другой пустой каталог, например
$ mkdir ~/experiment2
$ cd ~/experiment2
Затем более короткая версия Вашей команды, без рекурсии и уровней, чтобы сделать быстрый тест на одну страницу:
$ wget --tries=inf --timestamping --convert-links --page-requisites --no-parent -R '\?C=' http://ioccc.org/2013/cable3/
После того, как wget сделан, ~/experiment2
, будет иметь нет index.html?C=...
файлы:
.
└── ioccc.org
├── 2013
│ └── cable3
│ └── index.html
├── icons
│ ├── back.gif
│ ├── blank.gif
│ ├── image2.gif
│ ├── text.gif
│ └── unknown.gif
└── robots.txt
4 directories, 7 files
Таким образом, это действительно исключило их избыточный индексный вид index.html?C=...
каталоги при хранении всех других каталогов index.html, в этом случае просто index.html
Поэтому просто реализация -R '\?C='
, путем обновления оболочки функционируют в ~/.bashrc
:
crwl() {
wget --tries=inf --timestamping --recursive --level=inf --convert-links --page-requisites --no-parent -R '\?C=' "$@"
}
Затем не забудьте или тестировать в новом терминале или ударе ресурса для создания этого эффективным:
$ . ~/.bashrc
Затем попробуйте его в новом каталоге для сравнения:
$ mkdir ~/experiment3
$ cd ~/experiment3
$ crwl http://ioccc.org/2013/cable3/
wget -V
говорит, что это 1.13, это не может работать, и у Вас есть потребность на самом деле удалить противных index.html?C=...
самостоятельно, или попытка получить более позднюю версию wget.-R
или отклоните шаблон в этом случае страницы с ?C=
шаблон, который типичен для index.html?C=...
версии index.html
.?
оказывается, wget подстановочный знак, таким образом соответствует литералу ?
необходимо выйти из него как \?
index.html?C=
файлы. Только если Вы позволяете wget закончиться, затем wget будет следовать за Вашим -R
спецификация и удаляет любого временно загруженного index.html?C=...
файлы для Вас