压缩文件夹中某些文件的大列表时参数列表太长

Zac*_*ack 4 bash

我试图通过创建一个文件数组来压缩一定数量的文件。然后我尝试运行 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}
Run Code Online (Sandbox Code Playgroud)

Ech*_*444 6

摘自 man zip(linux 版本)

   zip -@ foo
   will store the files listed one per line on stdin in foo.zip.
Run Code Online (Sandbox Code Playgroud)

来自同一手册页的示例

   find . -name "*.[ch]" -print | zip source -@
Run Code Online (Sandbox Code Playgroud)

所以步骤将是:

  1. 建立一个所有要存档的文件的列表,格式必须逐行一个文件名

  2. 运行zip命令

    cat BIG_FILENAME_LIST.txt | zip thebigziparchive -@