1

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

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

有什么办法可以让这个工作吗?

4

1 回答 1

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

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

于 2013-04-02T08:41:49.213 回答