小编pie*_*e_j的帖子

识别可变长度文件名的合适正则表达式是什么?

我有一个 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

我感谢你的帮助。祝你有美好的一天,贝斯特斯,皮埃尔

bash regular-expression for

3
推荐指数
1
解决办法
150
查看次数

标签 统计

bash ×1

for ×1

regular-expression ×1