フォルダ内の特定のファイルの大きなリストを圧縮すると、パラメータリストが長すぎます。

フォルダ内の特定のファイルの大きなリストを圧縮すると、パラメータリストが長すぎます。

配列を作成して特定の数のファイルを圧縮しようとしています。その後、zipコマンドを実行しようとしましたが、「引数リストが長すぎます」というエラーが発生しました。

declare -a arr=()       

fixed=5
for i in `seq 10 1 200`; do
    for j in `seq $((i+fixed)) 1 200`; do
        arr+=("${i}_${j}.xxx")
    done
done

new_arr=$(printf ",%s" "${arr[@]}")
new_arr=${new_arr:1}

zip all_data.zip {$new_arr}

ベストアンサー1

man zip(Linux版)から抜粋

   zip -@ foo
   will store the files listed one per line on stdin in foo.zip.

同じマニュアルページの例

   find . -name "*.[ch]" -print | zip source -@

したがって、ステップは次のようになります。

  1. アーカイブするすべてのファイルのリストを生成します。形式は1行に1つのファイル名でなければなりません。

  2. zipコマンドの実行

    cat BIG_FILENAME_LIST.txt | zip thebigziparchive -@

おすすめ記事