0

この構造に従うディレクトリがたくさんあります:

\directories\
 |---\directory1\
 |      |---file1.txt
 |      |---file2.txt
 |
 |---\directory2\
 |      |---file1.txt
 |      |---file3.txt
 |
 |---\directory3\
 |      |---file4.txt
 |      |---file2.txt

ディレクトリとファイルをマージしたいので、最終的には次のようになります。

\directories\
 |---\directory1\
 |      |---file1.txt
 |      |---file2.txt
 |
 |---\directory2\
 |      |---file1.txt
 |      |---file3.txt
 |
 |---\directory3\
 |      |---file4.txt
 |      |---file2.txt
 |
 |---\mergeddata\
 |      |---file1.txt (from dir1 and dir2)
 |      |---file2.txt (from dir1 and dir4)
 |      |---file3.txt (from dir2)
 |      |---file4.txt (from dir3)

私はbashが苦手で、かなりのことを試していますが...良い結果が得られません。

いくつかの助けを楽しみにしています!

4

1 に答える 1

3

ファイルをどのようにマージするか、またはどのような順序でマージするかは言いませんでした。「ディレクトリ1がディレクトリ2の前に表示され、ディレクトリ2がディレクトリ3の前に表示される」と推測しますか?

次のスクリプトは、派手な置換に頼らずに、これを行う簡単な方法を示しています。

cd directories
mkdir mergeddata
for I in directory1 directory2 directory3 ; do   # replace with your actual directory list
    for F in "$I"/* ; do
        B=$(basename "$F")
        cat "$F" >> "mergeddata/$B"
    done
done

編集:ファイル名のいずれかがスペース文字またはその他の不便な空白で終わる場合に備えて、いくつかの引用符を追加しました.

于 2013-08-06T13:57:09.550 に答える