Unix tar返回参数列表太长[重复]

Posted

技术标签:

【中文标题】Unix tar返回参数列表太长[重复]【英文标题】:Unix tar returns The parameter list is too long [duplicate] 【发布时间】:2020-02-13 22:33:28 【问题描述】:

当我尝试使用 fowing 命令压缩文件夹中的所有文件时:

tar cvf mailpdfs.tar *.pdf

shell 抱怨:

ksh: /usr/bin/tar: 0403-027 参数列表过长。

如何处理?我的文件夹有25000个pdf文件,每个文件大小2MB,如何快速复制?

【问题讨论】:

Argument list too long error for rm, cp, mv commands、Unix cp argument list too long等可能重复 【参考方案1】:

您可以将所有 pdf 文件复制/移动到新文件夹,然后 tar 新文件夹。

mv *.pdf newfolder

tar cvf mailpdfs.tar newfolder

Referenced from unix.com

【讨论】:

【参考方案2】:

tar 选项-T 就是你需要的

   -T, --files-from=FILE
          get names to extract or create from FILE 

你打破了 ksh 中文件 globbing 的限制,所以你可以生成这样的文件列表

ls | grep '\.pdf$' >files.txt

然后将该文件与 tar 一起使用

tar cvf mailpdfs.tar -T files.txt

最后,您可以通过让 tar 从标准输入读取文件名(通过为 -T 选项指定特殊文件名 -)来取消创建临时文件来保存文件名。

所以我们最终得到了这个

ls | grep '\.pdf$' | tar cvf mailpdfs.tar -T -

【讨论】:

Why not parse ls? 这样,文件名中的特殊字符不再是问题:find . -maxdepth 1 -name "*.pdf" -print0 | tar --null -cf mailpdfs.tar -T -

以上是关于Unix tar返回参数列表太长[重复]的主要内容,如果未能解决你的问题,请参考以下文章

接受3个列表参数并返回所有组合的函数[重复]

rm,cp,mv命令的参数列表太长错误

Java基础笔记5

如何编写一个将字符串列表作为参数的函数[重复]

Python函数总结大全(函数定义,参数种类返回值等)

将列表转换为参数元组[重复]