我有一个 bash 脚本,可以从远程服务器分类和检索文件。我对基于文件名的分类步骤有问题。
我能够正确识别由文件名开头定义的不同文件系列。文件名可以是:
ala-olo_ulu-1602915797.txt
ala-olo_ulu-1602915799.txt
ili-olo-1602915897.txt
ili-olo-1602915997.txt
ili-olo-pip-1602925797.txt
ili-olo-pip-1602935797.txt
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我有 3 个家庭:(
ala-olo_ulu
ili-olo
ili-olo-pip
纯例子:))
每个系列都在循环的一次迭代中进行处理。在这样的迭代中,我在变量中提供了姓氏BASE_NAME(例如ili-olo)。
我的麻烦是在将文件同步到本地之前的去皮步骤。我正在使用以下 ssh 命令管理它。
ssh root@"${RMT_IP}" '
for FILE in "'${BASE_NAME}'*'${FILE_EXTENSION}'"; do
tar -rf "'${BASE_NAME}'.tar" ${FILE} --remove-files
done' < /dev/null
Run Code Online (Sandbox Code Playgroud)
不幸的是,使用此脚本,如果ili-olo在之前管理ili-olo-pip,则存档将包含两个系列(它们共享相同的开始)。然后什么时候ili-olo-pip进行管理,它们将不再是任何文件,并且 tar 命令以错误结束。(这就是我发现问题的方式)。
我想,我应该使用正则表达式来指定文件名的可变部分是数字部分。请问,如何更改for循环定义,以便以相同字符串开头的系列不会进入相同的 tar?
for FILE in "'${BASE_NAME}'*'${FILE_EXTENSION}'"; do
?
数字部分始终具有相同的位数(它是一个时间戳,具有第二个精度),例如 1602915797
我感谢你的帮助。祝你有美好的一天,贝斯特斯,皮埃尔