如何rsync多个枚举文件

如何rsync多个枚举文件

假设我有文件 data_1.mat、data_2.mat、...、data_n.mat。如何在一行代码中将这些文件同步到另一个文件夹?

我知道的唯一方法是在 for 循环中执行此操作:

for i in 1..n
do 
rsync 'data_$i' \dest\ 
done

如果我从服务器传输数据,这并不方便,因为它需要每次在 for 循环中建立一个新的 ssh。

答案1

您可以使用 shell 通配符来匹配相关文件集:

cp -p data_*.mat /dest/

如果您坚持的话可以使用rsync,但根据您的描述,使用它可能是错误的工具:

rsync -a data_*.mat /dest/

在这两种情况下,shell(而不是命令)都会扩展data_*.mat为所有匹配的文件/目录的列表,如果没有匹配,则保持不变。 (*通配符匹配零个或多个字符;?将精确匹配一个字符。)

如果您1..n是可能匹配的子集,那就有点困难,但也不是很多。某些 shell(包括bash)允许在固定范围内进行大括号扩展:{1..27}例如。将其插入到模式中,您就有了另一个解决方案:

cp -p data_{1..27}.mat /dest/

请记住,当您使用通配符模式时,是 shell 扩展了它们,因此您没有理由不能将它们放入以echo仅查看将要发生的情况的命令中:

echo data_?.mat
echo rsync -a data_*.mat /dest/
echo cp -p data_{1..27}.mat /dest/

答案2

您可以使用命令 lke this 提前生成所有必需文件的列表:

seq -f "data_%.0f.mat" 1 11

这将生成:

data_1.mat
data_2.mat
data_3.mat
    ...
data_11.mat

然后你可以使用

rsync –files-from=/path/of/file/with/above_list .....

相关内容