0

我正在尝试在 Bash 脚本中为一系列数据迁移创建一个循环:

在每一步开始时,脚本应该获取文件夹中最新文件的名称

称为“migrationfiles/”并将其存储在变量“migbefore”中并创建一个名为“migbefore+1”的新变量:

    Example:  if the "migrationfiles/" folder contains the following files: 

    migration.pickle1            migration.pickle2            migration.pickle3

变量“migbefore”和 migafter 应具有以下值:

    migbefore=migration.pickle3
    migafter=migration.pickle4

在每一步结束时,负责进行数据迁移的函数“metl”使用“migbefore”文件加载数据并创建1个名为“migafter”的新文件并将其存储在“migrationfiles/ " 文件夹,因此在这种情况下,创建的新文件将被调用:

    "migration.pickle4"

我假装使用的代码如下:

#!/bin/bash

migbefore=0
migafter=0

for y in testappend/*
    for x in migrationfiles/*
    do
         migbefore=migration.pickle(oldest)
         migafter=migbefore+1

    done


do
    metl -m migrationfiles/"${migbefore}" 
         -t migrationfiles/"${migafter}" 
         -s "${y}" 
         config3.yml

done

有谁知道我如何进行第一个循环(在“migrationfiles/”文件夹中搜索最新文件的循环),然后将变量“migafter”的名称分配为“migbefore+1”?

4

3 回答 3

0
# configuration:
path=migrationfiles
prefix=migration.pickle

# determine number of last file:
last_number=$( find ${path} -name "${prefix}*" | sed -e "s/.*${prefix}//g" | sort -n | tail -1 )

# put together the file names:
migbefore=${prefix}${last_number}
migafter=${prefix}$(( last_number + 1 ))

# test it:
echo $migbefore $migafter

This should work even if there are no migration files yet. In that case, the value of migbefore is just the prefix and does not point to a real file.

于 2014-09-11T17:20:13.237 回答
0

使用编号备份复制

真的很难说出你在这里真正想要做什么,以及为什么。但是,您可以通过使用cp命令中的--backup标志来简化生活。例如:

cp --backup=numbered testappend/migration.pickle migrationfiles/

这将确保您拥有一系列迁移文件,例如:

migration.pickle
migration.pickle.~1~
migration.pickle.~2~
migration.pickle.~3~

其中旧版本的序号较大,而最新版本没有序号扩展。这是一个非常简单的系统,但适用于各种用例。YMMV。

于 2014-09-11T16:49:31.277 回答
0

我认为这可能会做你想要的。

#!/bin/bash

count=0
prefix=migration.pickle
migbefore=$prefix$((count++))
migafter=$prefix$((count++))

for y in testappend/*; do
    echo metl -m migrationfiles/"${migbefore}" \
         -t migrationfiles/"${migafter}" \
         -s "${y}" \
         config3.yml

    migbefore=$migafter
    migafter=$prefix$((count++))
done
于 2014-09-11T17:05:17.913 回答