0

「期待される」出力フォルダと比較する必要のあるプログラムの出力がいくつかあります。しかし、私の問題は、出力ファイルのファイル名が常に異なることです。

フォルダ内のすべてのファイルの名前を別のフォルダ内の同じファイル名に変更するにはどうすればよいですか。ここに例があります-予想されるファイル構造(もちろん変更できます):

expected/folder1/file1.txt
expected/folder1/file2.txt
expected/folder2/file1.txt
expected/folder3/file1.txt

そして、私の出力は次のようになります(ファイルの数と位置は常に同じです):

result/folder1/fileOtherName1.txt
result/folder1/fileOtherName2.txt
result/folder2/fileOtherName1.txt
result/folder3/fileOtherName1.txt

ANTを使ってみましたが(アルファベット順)、インデックスでファイルを選択できないため、行き詰まりました。

ここにANTの私の擬似コードがあります(しかし、続行する方法がわかりません):

<target name="foo">
    <foreach>
        <fileset dir="result" casesensitive="yes">
            <include name="**/*.txt"/>
        </fileset>
        <antcall target="rename">
        </antcall>
    </foreach>
</target>

<target name="rename">
    <!-- how can I access another fileset and take the correct file? -->
    <!-- Here I got stuck -->
    <echo message="foreach.file is ${foreach.file}" />
    <echo message="foreach.dir is ${foreach.dir}" />
    <echo message="foreach.name.ext is ${foreach.name.ext}" />
    <echo message="foreach.name is ${foreach.name}" />
</target>

助けてくれてありがとう、それはANTだけにあるべきではありません-BASHスクリプトまたは同様のものもその仕事をすることができます。

4

2 に答える 2

0

個人的にはANTを知らないので、bashで試してみます。

for i in *; do 
  k=1; 
  for j in $i/*; do
    mv "$j" $i/file$k.txt;
    k=$[$k+1];
  done;
done

これにより、フォルダーが繰り返され、フォルダー内のすべてのファイルのカウンターが増加します。次のフォルダに進むと、カウンタがリセットされます。

私はあなたのようなテストディレクトリ構造を作成しました、そしてそれは私のために働きました。

于 2012-09-20T12:06:54.873 に答える
0

どうですか

#!/bin/bash

IN_DIR="expected/folder1"
OUT_DIR="result/folder2"

IN_FILES=($IN_DIR/*)
OUT_FILES=($OUT_DIR/*)

for ((i=0; i<${#IN_FILES[@]}; i++)); do
    mv ${OUT_FILES[i]} $OUT_DIR/$(basename ${IN_FILES[i]})
done

いくつかのテストディレクトリでテストしましたが、問題なく動作します。

ファイル名のいずれかにスペースが含まれている場合、それは機能しないことに注意してください。

于 2012-09-20T12:11:07.430 に答える