
配列を作成して特定の数のファイルを圧縮しようとしています。その後、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つのファイル名でなければなりません。
zip
コマンドの実行cat BIG_FILENAME_LIST.txt | zip thebigziparchive -@