lftp 排除语法混乱

lftp 排除语法混乱

我对他们网站上为 lftp 给出的语法描述感到困惑:

-x RX,   --exclude=RX              exclude matching files
-X GP,   --exclude-glob=GP         exclude matching files

我到底如何在镜像过程中排除某些文件?

--exclude filea --exclude fileb --exclude filec
--exclude filea fileb filec
--exclude ./filea ./fileb filec

我也用谷歌搜索过,但找不到任何排除语句的例子?!

答案1

-x RX用于使用 a 进行匹配Regular eXpression,如 in egrep(),而-X GX用于Glob Pattern匹配,这本质上只是普通的字符匹配,除了*。例如:

# To exclude .svn directories use:
mirror -e -x ^\.svn/$ /myhome/ /elsewhere

# To exclude all folders starting with a dot:
mirror -e -x /\..+/$ /myhome/ /elsewhere

# To exclude all *.bin AND *.so files:
mirror -e -X *.bin -X *.so /myhome/ /elsewhere

正如您所看到的,您必须对每种文件类型使用 -X,因为您无法提供列表,据我所知。

答案2

这是我的(已验证的、有效的)看法:

不包括:

  • 隐藏的文件夹和文件(还包括 .git)
  • 脚本/ - 文件夹(我保存我的deploy.sh
  • 各种活跃/危险/准备/肤浅的文件(注:带有管道的regExp | 运算符make(她:内部,单)引号是必要的)

部署.sh

#!/usr/bin/env bash

# switch to script parent dir == project dir
cd "$(dirname $(dirname $0))"

if ! [[ "$PWD" =~ \/myproject$ ]]; then
    echo "you are not in the myproject folder!"
    exit 1
fi

# a (relatively) good place to store your credits (outside repo, ...)
read FTPCREDITS < ~/.ssh/creds/FTPCREDITS

if [ -z "$FTPCREDITS" ]; then
    echo "Could NOT read credits. Exiting."
    exit 2
fi

好的,最后:

lftp -c "set ftp:list-options -a;                                  \
    open $FTPCREDITS;                                               \
    lcd .;                                                         \
    mirror --reverse --delete --use-cache --verbose --allow-chown  \
    --allow-suid --no-umask --parallel=2                           \
    -x '^\.' -x '^script\/'                                        \
    -x '\.(psd|rev|log|cmd|bat|pif|scr|exe|c?sh|reg|vb?|ws?)$'     \
    ;                                                              \
    close -a;"

适合测试:

  • --dry-run (自然)
  • ./script/deploy.sh | grep Transferring查看更多相关内容

相关内容