gpt4 book ai didi

linux - rsync 选定的子文件夹

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:15 28 4
gpt4 key购买 nike

我想从一系列父文件夹中传输选择性子文件夹:

/home/user/sample_rsync/ 
FolderA/sub1
FolderA/sub2
FolderA/sub3
FolderB/sub1
FolderB/sub2
FolderB/sub3
FolderC/sub1
FolderC/sub2
FolderC/sub3

从上面的例子来看,我只想从每个目录中复制 sub1。即在我的目的地,我希望创建以下文件夹(连同它们包含的文件)

/destination/
sample_rsync/FolderA/sub1
sample_rsync/FolderB/sub1
sample_rsync/FolderC/sub1

我该怎么做?

我试过了

rsync -avh -f"- *" -f"+ *sub1/*" /home/user/sample_rsync /destination/

尝试排除所有内容然后只包含 sub1 - 没有用。

有什么方法可以让它正常工作吗?

最佳答案

假设您的源文件夹位于您在第一个代码段中输入的名为“sources”的文件中(没有尾随/字符)

for s in $(cat sources)
do
rsync -av ${s} /destination/sample_rsync/$(echo ${s}| awk -F "/" '{print $1}')
done

当然,这仅在您的源文件中有一定级别的深层目录时才有效。如果要复制的目录的深度级别发生变化,则需要大量修改此脚本。但至少我希望这是一个起点。

根据你在下面的问题,你可能想使用这样的东西:(忽略上面的代码段。我只是为了历史目的把它留在那里)

cd /home/user/sample_rsync
for dir in $(find ./ -type d -name sub1)
do
dest=$(echo ${dir} | sed -e "1,1s+/sub1++")
mkdir /destination/sample_rsync/${dest}
rsync -av ${dir} /destination/sample_rsync/${dest}
done

请不要把它当作福音的话。我没有测试过任何代码。所以。它可能会产生一些意想不到的结果。请在您不介意出现问题的系统上进行测试。

关于linux - rsync 选定的子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15758048/

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