2

あるYAMLベースのシステムから別のシステムに移行し、ある管理スタイルから次の管理スタイルにデータをマージしています。

ではpath/to/directory/one/、ファイル名は、、foobar1.yml...foobar2.ymlです。path/to/new/directory/two/では、ファイル名は、、FooBar1.yml..FooBar3.ymlです。

元のシステムでは、path/to/directory/other/ファイル名、、がありFooBar1.datますFooBar2.datpath/to/directory/one/これらは、大文字と小文字が正しく、拡張子とファイルの内容が異なることを除いて、のファイルと1:1で一致します。

bashを使用して、の各ファイルを読み取り、path/to/directory/one/インポートする必要のある行を取得し、行の1つを変更してpath/to/new/directory/two/、正しい大文字と小文字を一致させて対応する正しいファイルに書き込み、そのファイルがまだ存在していません。

具体的には、MinecraftプラグインのデータをEssentialsからAdminCmdとWorldPosに移行しようとしています。

さまざまなファイルと形式の例を次に示します。http://pastebin.com/PMtCMXGt

ここで最初の質問ですので、具体的すぎたり曖昧すぎたりする場合はお知らせください。

4

2 に答える 2

0

何かのようなもの:

cd path/to/directory/one/
for f in *.yml
do
    grep 'whatyouwant' $f >> path/to/new/directory/two/$(sed 's/foobar/FooBar/' <<<$f)
done

bash「ここの文字列」を使用して、新しいファイル名を作成します

于 2012-08-31T08:49:00.447 に答える
0

私はあなたが使用できると思うもののベースを書きました。それが便利か不足しているかどうか教えてください

DIRONE=/path/to/dir/one
DIROTHER=/path/to/dir/other

for f in $DIRONE/*.yml
do
    basename $f
done | sed -e 's/(.+)\.yml/\1/' | while read name; 
    do

            # find a matching .dat file in $DIRTWO
            for f2 in $DIROTHER/*.dat
            do
                    basename $f2
            done | sed -r 's/(.+)\.dat/\1 \L\1/' | while read nameOrig nameLower; 
                    do
                            if [ $nameLower -eq $name ]; then
                                    #nameLower is foobar1.yml in /path/to/dir/one
                                    #nameHigher is FooBar1.dat in /path/to/dir/two
                                    echo "$nameOrig matches $name"
                                    break;
                            fi
                    done
    done 
于 2013-06-21T06:25:09.130 に答える