在bash循环数组中使用通配符

时间:2014-12-24 21:22:28

标签: bash loops rsync

我收集了数百个按字母顺序排列的目录,里面有不同的命名文件。我想使用rsync将这些目录复制到另一个位置。 我不想手动浏览所有目录,而是想使用--include的{​​{1}}选项或在rsync中创建一个循环来遍历目录。< / p>

到目前为止,我已尝试使用下面的bash脚本,但尚未成功。

bash

有谁知道使用for dir in {A..Z}; do echo "$dir"; rsync --progress --include $dir'*' --exclude '*' -rt -e ssh username@192.168.1.123:/source/directory/ ~/target/directory/ done; rsync选项查看目录的正确方法是什么?

更新 上面的--include脚本更多的是尝试循环遍历我的目录并查看结果。我实际想要使用的命令就是这个:

bash

我知道for dir in /*; do rsync --progress --include $dir'*' --exclude '*' --bwlimit=2000 -rt -e ssh username@192.168.1.123:/source/directory/ ~/target/directory/ done; 可以执行类似bash的操作,但这似乎并没有让我得到我想要的结果。我已经复制了目录字母表的一半,所以我尝试将{A..Z}作为数组。

更新

我已经提出以下脚本从我的源目录位置运行。

{F..Z}

这将从源目录传输名称以字符&#34; P&#34;开头的所有目录。到&#34; Z&#34;在ssh上使用端口123。 这适用于shell脚本。我确信在一个单行命令中有更好的方法可以做到这一点,但是这个我想出来帮助自己。

2 个答案:

答案 0 :(得分:1)

听起来像是想要递归rsync。我会选择:

rsync -r / --restOfYourRsyncArgs

遍历/中的每个文件/文件夹/子文件夹(可能很多,考虑排除和/或不同的目标路径)和上传/下载。设置排除您不想发送的文件和文件夹。

答案 1 :(得分:0)

我已经提出以下脚本从我的源目录位置运行。

#!/bin/bash

time=$(date +"%Y-%m-%d %H:%M:%S") # For time indication
dir=/source/directory/[P-Z]* # Array of directories with name starting with "P" to "Z"

printf "[$time] Transferring: /source/directory/\"$dir\"\n"
rsync -trP  -e 'ssh -p 123' --bwlimit=2000 $dir username@192.168.1.123:/target/directory

这将从源目录传输名称以字符&#34; P&#34;开头的所有目录。到&#34; Z&#34;在ssh上使用端口123.这适用于shell脚本。我确信在一个单行命令中有更好的方法可以做到这一点,但是这个我想出来帮助自己。