我定期运行 rsync 命令,从我的远程服务器下载新文件。
下载的文件存储在文件夹中,一旦我将它们下载到本地计算机,我可能会删除不再需要的文件夹(及其内容)。
当我再次运行 rsync 命令时,它将下载任何新文件夹以及我从本地机器上删除的我不想要的旧文件夹。
我想在 rsync 命令上执行的操作是将文件夹名称存储在一个文件中(例如 downloaded.log),然后在下次运行 rsync 时将其用作排除文件,这样它就不会再次下载这些文件夹。我认为只存储文件夹名称而不是文件夹和文件名会更有效率,因为跳过文件夹会跳过文件。
有人可以解释一下如何让 rsync 命令输出文件夹名称吗?
当前 RSYNC 命令:
rsync -avz --dry-run remote-host:downloads/ ~/Downloads/
答案1
使用--exclude-from=FILE
并将您不想要的目录放入此文件中。
例如如果你有一个目录 test,里面有文件夹 a、b 和 c,你想将它同步到文件夹 test2,但想忽略文件夹 b 和 c,你需要创建如下文件:
$ cat ignore
/b
/c
然后运行命令
rsync -avz --exclude-from=ignore test/ test2/
编辑:
听从你的命令
rsync -avz --dry-run --exclude-from=/path/to/ignore-file remote-host:downloads/ ~/Downloads/
并在文件 /path/to/ignore-file 中列出远程主机上下载文件夹中的内容,如下所示。
subfolder1/
subfolder2/
编辑2:
为了使其自动化,您可以创建类似的脚本
/home/youruser/scripts/add-to-ignore.sh
#/bin/bash
for filepath in ~/Downloads/*
do
filename=$(basename $filepath)
echo "$filename/" >> /home/youruser/.ignorelist
done
然后像这样运行
rsync -avz --dry-run --exclude-from=/path/to/ignore-file remote-host:downloads/ ~/Downloads/ && bash /home/youruser/scripts/add-to-ignore.sh
这应该可以解决问题,并且列表将保留旧目录。
您还可以使用 --log-file 和 --log-file-format 来记录您刚刚在文件中复制的内容,然后使用脚本删除行首,这样您就可以使用此文件作为 --exclude-from 的源。