关于 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
希望对您有所帮助。
我有一个名为 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
希望对您有所帮助。