关于 for 循环和提取部分名称以使用 borg create 命令的问题

Question about for loop and extracting parts of the name to use borg create command

我有一个名为 sync 的文件夹,其中包含如下文件:

vzdump-lxc-101-2018_06_07-02_23_11.tar
vzdump-lxc-101-2018_07_20-03_04_22.tar
vzdump-lxc-101-2018_08_17-03_34_11.tar
vzdump-lxc-101-2018_09_17-02_44_50.tar
vzdump-lxc-101-2019_01_19-00_16_02.tar
...
vzdump-lxc-104-2018_06_30-01_50_23.tar
vzdump-lxc-104-2018_07_20-03_18_56.tar
vzdump-lxc-104-2018_08_17-03_40_15.tar
vzdump-lxc-104-2018_10_19-01_52_00.tar
vzdump-lxc-104-2018_11_06-02_39_07.tar
vzdump-lxc-104-2019_01_19-00_24_14.tar

范围从 vzdump-lxc-100 到 vzdump-lxc-1xx 等。

我正在尝试遍历给定目录中的所有文件并执行 borg create (...) /path/to/repo::vzdump-lxc-$ID-$year_$month_$day "$ f" 但我不确定如何将名称缩减为这三个点

我用以下方法测试了它:for f in vzdump-lxc*; do borg create (...) /path/to/repo::srv01_lxc_"$f" "$f";done,但这给了我太长的全名,包括领先的 vzdump-lxc、小时、分钟、秒和扩展名,也许有人可以引导我进入正确的方向。

我正在努力实现 /path/to/repo::srv01_lxc_$id_$year_$month_$day

干杯

您可以使用 '._-' 作为输入字段分隔符来拆分该名称。像这样:

IFS='-_.' read -ra path <<< vzdump-lxc-104-2019_01_19-00_24_14.tar
echo ${path[*]}
vzdump lxc 104 2019 01 19 00 24 14 tar

上面的代码创建了一个数组 path,其中的所有组件都拆分了。之后,您可以通过引用其索引来使用它们中的任何一个:

echo ${path[3]}
2019

考虑到这一点,您的代码可以是这样的:

for f in vzdump-lxc*; do
    IFS='-_.' read -ra p <<< $f 
    borg create (...) /path/to/repo::srv01_lxc_${p[2]}-${p[3]}-${p[4]}-${p[5]} "$f"
done

希望对您有所帮助。