我有一个名为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
干杯
发布于 2019-05-13 01:04:17
您可以使用'._-'
作为输入字段分隔符来拆分该名称。如下所示:
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
我希望这能有所帮助。
https://stackoverflow.com/questions/56101415
复制相似问题