wget рекурсивный только для файлов, которые передают регулярное выражение

Я хотел бы использовать wget рекурсивно в каталоге ftp следующим образом:

ftp://ftp.ensembl.org/pub/current_fasta/

Которая содержит еще 2 уровня каталога внутри, первый с именем вида и один внутри с именем dna , например: ftp://ftp.ensembl.org/pub/current_fasta/species_name/dna/

Например, у одного из них есть имя вида homo_sapiens :

ftp://ftp.ensembl.org/pub/current_fasta/homo_sapiens/dna/

Внутри каждого ./dna/ я хотел бы загрузить только файл с именем, содержащим слово toplevel но не тот, который содержит слово _rm.toplevel .

Наконец, мне нужна рекурсивная команда wget, которая будет загружать все из этих каталогов, каждый в качестве выходного файла с именем species_name.fa.gz , где имя species_name – это имя родительского каталога, непосредственно перед dna .

Есть идеи?

2 Solutions collect form web for “wget рекурсивный только для файлов, которые передают регулярное выражение”

Если вы можете использовать lftp :

 echo 'mirror --no-empty-dirs -I *toplevel* -X *_rm.toplevel* . .' | lftp ftp://ftp.ensembl.org/pub/current_fasta/ for folder in *; do mv $folder/dna/*toplevel* $folder.fa.gz rm -r "$folder" done 

Вы можете указать wget включить или исключить файлы и каталоги на основе шаблонов подстановочных знаков. Непроверенные:

 wget -R \ -X '/*/?*dna,/*/pep' \ -A '*toplevel*' -R '*_rm.toplevel*' \ ftp://ftp.ensembl.org/pub/current_fasta/ 

Для FTP wget – не лучший инструмент для сложного поиска. Wget знает, как следить за ссылками на веб-странице, но это не относится к FTP. Я рекомендую монтировать FTP-сайт как каталог с AVFS , CurlFtpFS или какой-либо другой файловой системой FUSE и с помощью cp или rsync . С AVFS:

 mountavfs ls ~/.avfs/\#ftp:ftp.ensembl.org/pub/current_fasta/homo_sapiens 

С CurlFtpFS:

 mkdir ~/current_fasta curlftpfs ftp://ftp.ensembl.org/pub/current_fasta/ ~/current_fasta ls ~/current_fasta/homo_sapiens 

Чтобы скопировать файлы в любую оболочку:

 for x in ~/.avfs/\#ftp:ftp.ensembl.org/pub/current_fasta/*/dna/*toplevel*; do case $x in *_rm.toplevel*) continue;; esac species=${x%/dna/*}; species=${species##*/} cp -p "$x" "$species.fa.gz" done 

Или в zsh:

 autoload zmv zmv -C '~/.avfs/\#ftp:ftp.ensembl.org/pub/current_fasta/(*)/dna/*toplevel*~*_rm.toplevel*' '$1.fa.gz' 
  • Почему curl -O -C на Mac не загружается
  • Почему я не могу передать файл через wget (FTP) с помощью функции exec () в PHP?
  • wget и предотвращение загрузки файлов на рекурсивный wget
  • Загрузите все исходные файлы для веб-страницы
  • Как загрузить файл с FTP-сервера, а затем автоматически удалить его с сервера после завершения загрузки?
  • Как вы переименовываете файлы в списке, который будет использовать wget?
  • Как узнать, загружен ли файл wget?
  • Wget с другим именем файла, но с тем же расширением
  • Инструменты для анализа автоматически генерируемых HTTP-индексов?
  • wget не разрешает относительные ссылки должным образом?
  • Как использовать diff при выполнении wget?
  • Linux и Unix - лучшая ОС в мире.