从 rsync 中排除所有点下划线文件

从 rsync 中排除所有点下划线文件

如何使用rsync -av但排除所有以点下划线 ( ._example.txt) 开头的文件并忽略.DS_Store文件?

答案1

你可以试试--exclude="<filePattern>"

rsync -av --exclude="._*" --exclude=".DS_Store" <source> <destination>

答案2

使用--exclude='._*'将使rsync忽略名称开头带有点下划线的所有文件和目录。使用--exclude='.DS_Store'您将忽略其他类型的文件。

答案3

要拥有多个排除规则而不用多个选项使命令行混乱--exclude,您可以使用该-F选项和.rsync-filter列出要排除的模式的文件。

-F     The -F option is a shorthand for adding two --filter rules to your command.
       The first time it is used is a shorthand for this rule:

         --filter='dir-merge /.rsync-filter'

       This tells rsync to look for per-directory .rsync-filter files that have
       been sprinkled through the hierarchy  and  use  their rules to filter the
       files in the transfer.

.rsync-filter以下是要备份的文件夹根目录中的文件示例:

- /temp
- /lost+found

# Windows thumbnails
-p Thumbs.db

# MS Office temporary files
-p ~$*

# common Mac junk
-p .TemporaryItems
-p .DS_Store
-p ._*

p后面的修饰符表示-“易腐烂”,这将使 rsync 也删除目标上这些排除的文件。

答案4

如果您想排除匹配的文件和目录._*.DS_Store那么前面的任何一个答案就足够了:

rsync -av --exclude='._*' --exclude='.DS_Store' src dst

另一方面,为了完全按照要求回答您的问题,此代码片段将排除符合您条件的文件,同时仍包含匹配_*和 的目录.DS_Store

rsync -av --include '.DS_Store/' --include '._*/' --exclude '.DS_Store' --exclude '._*' src dst

工作示例

# Set up the example directory tree
mkdir -p src/a/.DS_Store src/a/._example.dir dst
touch src/.DS_Store src/._example.txt src/a/.DS_Store/keep src/a/._example.dir/keep src/item src/a/another

# Show what we have
find src -type f

    src/.DS_Store
    src/._example.txt
    src/a/.DS_Store/keep
    src/a/._example.dir/keep
    src/a/another
    src/item

# Copy it. Omit matching files but keep the directories
rsync -av --include '.DS_Store/' --include '._*/' --exclude '.DS_Store' --exclude '._*' src/ dst

    sending incremental file list
    ./
    item
    a/
    a/another
    a/.DS_Store/
    a/.DS_Store/keep
    a/._example.dir/
    a/._example.dir/keep

# Tidy up
rm -rf src dst

相关内容