次の3つのファイルがあります。
File.txt.7z=5.4GB
ファイル 1.txt.7z=251M
ファイル 2.txt.7z=7.7M
ディレクトリ内の唯一のファイルは次のとおりです。
$ tree
.
├── file.txt.7z
├── file-1.txt.7z
└── file-2.txt.7z
欲しい
- ファイルの解凍
- 1つのファイルにマージ
- マージされたファイルを500,000のラインファイルに分割
- 結果は ".txt"拡張子を持つ多くのファイルです。
次に、次のように実装します。
p7zip -d "*.txt.7z"
cat file-1.txt >> file.txt
rm file-1.txt
cat file-2.txt >> file.txt
rm file-2.txt
split -l 500000 file.txt
for f in *; do mv "$f" "$f.txt"; done
どうすれば、よりエレガントな方法でこれを達成できますか?
ベストアンサー1
7za
+split
ソリューション(シングルパイプライン):
7za e "*.7z" -so 2> /dev/null | split -l500000 --additional-suffix=".txt" --numeric-suffixes=1 - "file"
-7za
オプション:
e
- アーカイブ抽出/圧縮解除-so
- STDOUTにコンテンツを書き込む
-split
オプション:
--additional-suffix=".txt"
.txt
- 生成されたすべてのファイル名にサフィックスを追加します。--numeric-suffixes=1
- 次に始まる数字の接尾辞を使用してください。1
-
(ハイフン) - STDIN(標準入力)からデータを読み込みます。"file"
- すべての結果ファイル名の共通プレフィックス
上記のコマンドは、次file01.txt
の命名形式でファイルを生成しますfile02.txt
。