如何使用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