ディレクトリのテキストファイルブロックを1つ以上のファイルにマージする方法は?

ディレクトリのテキストファイルブロックを1つ以上のファイルにマージする方法は?

ディレクトリ内のテキストファイルの塊を1つ以上のファイルにマージしてから、マージされたファイルを圧縮する必要があります。

例:ディレクトリに500,000のテキストファイルがある場合は、Aと言います。 50,000個のファイルセットを1つのファイルセットにマージしたいと思います。つまり、それぞれ50,000個のファイルの内容を含む10個のマージされたファイルがあります。最後に、マージされた各ファイルを圧縮したいと思います。つまり、このプロセスが完了すると、合計10個のzipファイルがあります。

シェルスクリプトでこれを実行しようとしています。解決策が見つかりません。

誰かがシェルスクリプトを使用してこれを達成する最も効率的な方法を教えてください。

ベストアンサー1

私のビューには多数のファイルを含むディレクトリが1つしかないので、ファイルリストをリンクするのではなく小さなファイルセットに分割し、必要に応じて小さなファイルを圧縮して削除する必要があります。

私が提案できる方法は次のとおりです。

cd /to/dir/with/many/files/
mkdir ../tmp
find . | split -l 50000 ../tmp/x
for i in ../tmp/x* ; do 
    while read filename ; do
        cat "$filename" >> "${i}.text" ;
        # rm "$filename" # uncomment it only if you need to delete small files
    done <"$i"
    zip "${i}.zip"  "${i}.text"
    # rm "${i}.text" # uncomment it only if you need to delete result file
done

おすすめ記事