Se você puder usar 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
Eu gostaria de usar o wget recursivamente em um diretório de ftp como este:
ftp://ftp.ensembl.org/pub/current_fasta/
Que contém outros dois níveis de diretório, o primeiro com o nome da espécie e um dentro com o nome dna
, assim:
ftp://ftp.ensembl.org/pub/current_fasta/species_name/dna/
Por exemplo, um deles tem o nome da espécie homo_sapiens
:
ftp://ftp.ensembl.org/pub/current_fasta/homo_sapiens/dna/
Dentro de cada diretório ./dna/
, eu gostaria de baixar apenas o arquivo com o nome contendo a palavra toplevel
, mas não aquele contendo a palavra _rm.toplevel
.
Por fim, gostaria que um comando recursivo wget baixasse todos aqueles desses diretórios, cada um como um arquivo de saída com o nome species_name.fa.gz
, em que species_name
é o nome do diretório pai, logo antes de dna
.
Alguma idéia?
Você pode dizer ao wget para incluir ou excluir arquivos e diretórios com base em padrões de caractere curinga. Não testado:
wget -R \
-X '/*/?*dna,/*/pep' \
-A '*toplevel*' -R '*_rm.toplevel*' \
ftp://ftp.ensembl.org/pub/current_fasta/
Para FTP, o wget não é a melhor ferramenta para recuperação complexa. O Wget sabe como seguir links em uma página da web, mas isso não é relevante para o FTP. Recomendo montar o site FTP como um diretório com AVFS , CurlFtpFS ou algum outro sistema de arquivos FUSE e usando cp
ou rsync
. Com o AVFS:
mountavfs
ls ~/.avfs/\#ftp:ftp.ensembl.org/pub/current_fasta/homo_sapiens
Com o CurlFtpFS:
mkdir ~/current_fasta
curlftpfs ftp://ftp.ensembl.org/pub/current_fasta/ ~/current_fasta
ls ~/current_fasta/homo_sapiens
Para copiar os arquivos em qualquer shell:
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
Ou em zsh:
autoload zmv
zmv -C '~/.avfs/\#ftp:ftp.ensembl.org/pub/current_fasta/(*)/dna/*toplevel*~*_rm.toplevel*' '$1.fa.gz'
Tags wget