gpt4 book ai didi

shell - rsync --include --exclude 简单任务不起作用

转载 作者:行者123 更新时间:2023-12-02 13:51:44 26 4
gpt4 key购买 nike

我想使用 rsync 从服务器下载特定文件,这是目录的方案:

. 
file1
fakeotherfolder
filefile
morefile
morefakefolder
file
file2
file3
mainfolder
myfolder1
folfile1
folfile2
myfolder2
folfile1
folfile2
myfolder3
folfile1
folfile2
myfolder4
folfile1
folfile2

基本上,我想获取所有不在 mainfolder/myfolder* 中的文件,例如特定的 mainfolder/myfolder2

最后我想要什么:

 . 
file1
fakefolder
filefile
morefile
morefakefolder
file
file2
file3
mainfolder
myfolder2
folfile1
folfile2

我尝试使用以下选项进行 rsync:

rsync --include="*/mainfolder/myfolder2/*"--exclude="*/mainfolder/*"

但我得到的是一个空的主文件夹...

 . 
file1
fakefolder
filefile
morefile
morefakefolder
file
file2
file3
mainfolder

最佳答案

出了什么问题

rsync --include="*/mainfolder/myfolder2/*" --exclude="*/mainfolder/*"
  1. 指令 --include="*/mainfolder/myfolder2/*" 告诉 rsync 包含目录 */mainfolder/下的文件我的文件夹 2/。您可能认为它应该隐含地告诉它包含目录 */mainfolder/myfolder2/ 但它没有。它只包括该目录下的文件。

  2. 指令 --exclude="*/mainfolder/*" 告诉它排除 */mainfolder 下的所有文件和目录。这意味着它排除了 */mainfolder/myfolder2/。因为 myfolder2 被排除在外,所以它下面的文件永远不会被检查。

如何修复

解决方案是显式包含mainfolder/myfolder2:

rsync --include="mainfolder/myfolder2" --include="mainfolder/myfolder2/*" --exclude="mainfolder/*" src/ dest

解决方案是显式包含mainfolder/myfolder2:

请注意,resync 按照声明的顺序解释包含/排除。因此,--include="mainfolder/myfolder2" 出现在 --exclude="mainfolder/*" 之前很重要。总之,我们需要三个指令,exclude 指令需要放在最后:

  1. --include="mainfolder/myfolder2"

  2. --include="mainfolder/myfolder2/*"

  3. --exclude="mainfolder/*"

关于shell - rsync --include --exclude 简单任务不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26310067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com