rsync选择了子文件夹

时间:2013-04-02 07:00:00

标签: linux rsync transfer

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

/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 - 没有用。

我能用这种方式工作吗?

1 个答案:

答案 0 :(得分:1)

假设您的源文件夹位于第一个代码段中输入的名为“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

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