Espelhamento LFTP inclui - incluindo outros diretórios diferentes do que eu incluí

4

Minha pergunta: Como posso ter certeza de que o LFTP inclui apenas arquivos AND diretórios usando --include ou --include-glob , e não baixar vários diretórios extras da raiz do controle remoto que não são está nos includes?

Algum contexto:

Estou usando o LFTP e espelhamento para fazer o download de um arquivo de sites, mas só quero baixar alguns arquivos e diretórios. Então, eu dei ao LFTP algumas inclusões e exclusões para rodar a partir da raiz do servidor remoto.

No meu entender, de acordo com o homem do LFTP, ele incluirá APENAS todos os arquivos para os quais você informar, caso você especifique incluir, e então aplicará suas exclusões às regras de inclusão. Isso funciona simplesmente para arquivos no diretório raiz e não para baixar nenhum arquivo que não esteja incluído ... no entanto, ele está baixando todos os diretórios na raiz, não apenas os que eu pedi para incluir.

Minha suspeita é que estou tendo problemas com o uso de --include e --include-glob ... Não importa o que eu tentei entre ambos (glob ou regex), não consigo obter o LFTP mirror para não baixar diretórios fora do que eu especifico em meus includes.

Aqui está o meu meu script bash (algo novo no bash scripting)

#!/bin/bash

# Credentials
protocol="ftp" # ftp or sftp
host="host"
user="user"
pass="pass"
localcd="/path/to/localdir"
remotecd="/remotedir"

# Set up FTP URL
ftpurl="$protocol://$user:$pass@$host"

# Default includes - helps only include core files in root in case there are other random files
includes="--include-glob wp-admin/*" # other dirs are still being downloaded with these three
includes+=" --include-glob wp-content/*"
includes+=" --include-glob wp-includes/*"

includes+=" --include ^wp-.*\.php$"  # works just fine
includes+=" --include ^index.php$"   # works just fine
includes+=" --include ^xmlrpc.php$"   # works just fine

# Exclude hidden files/directories
excludes="--exclude-glob .*"
excludes+=" --exclude-glob .*/"

# LFTP sets
lftp_sets="set cmd:fail-exit yes;"
if [ "$protocol" == "ftp" ]
then
    lftp_sets+=" set ftp:ssl-allow no;"
fi

# Run the LFTP
lftp -e "$lftp_sets
open '$ftpurl';
lcd $localcd;
cd $remotecd;
mirror --continue --only-newer --delete --verbose=3 --no-perms --parallel=8 $includes $excludes"

Eu tentei

includes="--include ^wp-.*/.**"

e

includes="--include ^wp-admin/.*"
includes+="--include ^wp-content/.*"
includes+="--include ^wp-includes/.*"

e tantas outras variações que não posso contar. Tudo o que eu pesquisei sobre LFTP espelho 4 páginas tem um link roxo. : (

    
por Josh S. 17.02.2015 / 23:52

1 resposta

3

Ordem de operações.

Você precisa da sua exclusão primeiro e, em seguida, inclui.

Este exemplo exclui tudo, inclui algumas pastas e exclui os arquivos dessas pastas.

mirror --exclude '.*' --exclude '.*/' --include 'v*-stable/' -X '*.src.rpm'

no seu caso

mirror --continue --only-newer --delete --verbose=3 --no-perms --parallel=8 $excludes $includes"
    
por 17.04.2015 / 18:03