我正在尝试运行 rsync 以根据文件名模式(不区分大小写)沿路径递归复制一些文件。这是我为运行 rsync 所做的:
$ rsync -avvz --include ='*/' --include='.*[Nn][Aa][Mm][E].*' --exclude='*' ./a/ ./b/
Run Code Online (Sandbox Code Playgroud)
没有被复制,调试输出显示:
[sender] hiding file 1Name.txt because of pattern *
[sender] hiding file 1.txt because of pattern *
[sender] hiding file 2.txt because of pattern *
[sender] hiding file Name1.txt because of pattern *
[sender] hiding directory test1 because of pattern *
[sender] hiding file NaMe.txt because of pattern *
Run Code Online (Sandbox Code Playgroud)
我试过使用: --include='*[Nn][Aa][Mm][E]*'和其他组合,但还是不行。
关于如何使用正则表达式包含一些文件的任何想法?
我尝试将所有文件从 NTFS 复制到外部驱动器,并希望保留所有权限和属性。外部驱动器已经有一个 NTFS 并包含其他文件。
我考虑过使用以下工具:
ntfsclone不起作用,因为它在扇区级别运行并且会克隆整个 FS,从而破坏旧数据。如果用于创建图像文件,我无法从 Windows 机器访问内容。rsync 不保留所有元数据。另一种方法是robocopy在正在运行的 Windows 中使用,但我更愿意在没有的情况下复制文件。(源分区用作系统的C:\.)
如何复制文件?
如果 Apache 正在编写一个大文件并且在该文件上运行 rsync cron 作业,rsync 是否尝试复制该文件?
例子
/var/www./var/www同步。我有一个文件夹的两个副本
src/
dest/
Run Code Online (Sandbox Code Playgroud)
我想合并它们,执行以下操作:
如果一个文件只在src,我希望它被移动到dest
如果一个文件只在 . dest,我希望它忽略 IE。
如果文件在两者中并且具有相同的内容(即相同的大小和日期),则从src
如果文件是在这两个并执行不具有相同的内容,留下src这样我就可以手动将它们合并。
只有极少数文件(占总文件的 0% 到 5% 之间)应该属于最后一个类别,但我不知道如何将两者中的文件和相同的文件与两者分开,但不同。
我试图弄清楚如何做到这一点,rsync但到目前为止无济于事。
我正在运行一个rsync命令,将我的文件从服务器复制到我的 Windows 机器,例如:
rsync -rt --partial-dir=".rsync" --del rsync://server/a/ a/
Run Code Online (Sandbox Code Playgroud)
每当此命令创建一个目录时,它往往会创建一个具有疯狂 ACL/权限的目录。对我来说,它倾向于创建 10<not inherited>个条目,其中一个拒绝运行rsync命令的用户的条目,其他条目也没有多大意义。甚至使用类似线程建议的--chmod=ugo=rwX选项也会发生这种情况。
我该怎么做才能完全阻止rsync尝试设置权限(并将权限留给 Windows 中的 ACL 继承)?
我想使用以下模式从远程系统传输 N 个文件:
ssh remote ls target/
2013-08-01.mjson.gz
2014-07-04.mjson.gz
2014-07-09.mjson.gz
2014-08-12.mjson.gz
...
Run Code Online (Sandbox Code Playgroud)
我只想要2014-07*文件。我到目前为止的尝试:
rsync -a --dry-run --verbose --include="2014-07-*" remote:target .
# transfers everything
rsync -a --dry-run --verbose --include="2014-07-*" --exclude="*" remote:target .
# transfers nothing
rsync -a --dry-run --verbose --exclude="*" --include="2014-07-*" remote:target .
# transfers nothing
rsync -a --dry-run --verbose --include="*/2014-07-*" --exclude="*" remote:target .
# transfers nothing
rsync -a --dry-run --verbose --include="***/2014-07-*" --exclude="*" remote:target .
# transfers nothing
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用 --files-from 来指示我想要的文件,但这样做很痛苦。
我从来不明白如何正确使用包含/排除来做我想做的事。手册页指出:
并且对第一个匹配模式起作用:如果它是排除模式,则跳过该文件;如果是包含模式,则不会跳过该文件名;如果没有找到匹配的模式,则不会跳过文件名。
读到这里,我假设如果首先包含,并且文件名匹配,那么“文件名不被跳过”部分就会开始。显然,我错了。
在手册页的进一步下方,我看到:
请注意,当使用 --recursive (-r) 选项(由 …
scp user@aws-ec2:~/file filersync --partial --progress -Pav -e ssh user@aws-ec2:~/file filescp只给我 200K/s,但rsync给我 1.9M/s
我测试了几次,结果都是一样的。
rsync 使用多线程??
我正在尝试复制目录树以递归方式保留文件的硬链接。使用 gnu cp,这将与 -l 标志一起使用。cp 然后会重新创建目录结构,但不需要复制每个文件的内容。
这是备份的准备工作,首先我想制作上一个备份的廉价(硬链接)副本,然后通过此副本 rsync 源目录。大致:
cp -r -l yesterdays_backup todays_backup
rsync -a source_dir todays_backup
Run Code Online (Sandbox Code Playgroud)
不幸的是,OSX 的 cp 不支持 -l 标志,据我所知,cpio 不支持递归复制。另一种选择是 pax,但这会导致整个目录结构被复制:
pax -rw backups/yesterdays_backup backups/todays_backup
Run Code Online (Sandbox Code Playgroud)
变换:
yesterdays_backup
|
\source_dir (...)
Run Code Online (Sandbox Code Playgroud)
到:
todays_backup
|
\backups
\yesterdays_backup
\source_dir(...)
Run Code Online (Sandbox Code Playgroud)
应该有一个简单/明显的方法来做到这一点,但我目前很难过...... cpio 和 pax 的任何替代方案?我想避免安装 gnu cp。
我知道 Timemachine,但它不能正确地增量备份加密目录。
我正在本地和远程文件夹之间进行同步。碰巧我通过一个愚蠢的命令丢失了一个文件。
在进行实际文件传输之前,我习惯于一致和您确认(“去?”)的方式。
rsync 有这样的选项吗?(服务器端没有一致)
谢谢!
我正在使用 rsync 复制 ~10GB 的小文件。如果在 rsync 运行时修改了源目录中的文件会发生什么?