2011-05-05 112 views
9

我正在使用AIX。Unix cp参数列表太长

当我尝试一个文件夹中复制所有文件到另一个文件夹使用以下命令:

cp ./00012524/*.PDF ./dummy01

外壳抱怨:

ksh: /usr/bin/cp: 0403-027 The parameter list is too long.

如何处理它?我的文件夹包含8xxxx文件,我如何快速复制它们?每个文件的大小为4x kb到1xx kb。

回答

10

使用find命令的* nix:

find ./00012524 -type f -name "*.PDF" -exec cp {} ./dummy01/ \; -print 
+2

这项工作,但也许很慢? – lamwaiman1988 2011-05-05 05:17:40

+1

在一般情况下,我还会添加一个“-type d”。与*/PDF匹配的目录应该很少,但是对于更一般的副本,它将避免首先复制父目录(或者在没有-r标志时失败)和子级复制导致的多个副本。 – FGM 2017-04-06 08:12:48

+0

谢谢,这是一个很好的观点(编辑) – anubhava 2017-04-06 11:34:57

0

你应该能够使用一个for循环,例如

for f in $(ls ./00012524/*.pdf) 
do 
    cp $f ./dummy01 
done 

我没有办法测试这个,但它应该在理论上工作。

+0

ls命令可能(读“几乎肯定”)会得到相同的错误。参数太长是Unix系统上C库的标准错误(man sysconf更多)。最好的应用程序是find ... | cpio -pvumd ...或使用xargs或tar c ... |焦油x等NOne这些将需要一个壳扩大glob是他的问题的原因。对于SeverFault或SuperUser而言,这比SO更适合。 – 2011-05-05 04:08:00

0
$ (cd 00012524; ls | grep '\.PDF$' | xargs -I{} cp {} ../dummy01/) 
0

-t标志cp在这里很有用:

find ./00012524 -name \*.PDF -print | xargs cp -t ./dummy01

0

最好的命令从一个目录拷贝大量文件到另一个。

find/path/to/source/-name“*”-exec cp -ruf“{}”/ path/to/destination/\;

这对我有很大的帮助。

3

cp命令对可以同时复制的文件有限制。

一种可能性,你可以使用多次复制它们在你的文件模式cp命令基地,如:

cp ./00012524/A*.PDF ./dummy01 
cp ./00012524/B*.PDF ./dummy01 
cp ./00012524/C*.PDF ./dummy01 
... 
cp ./00012524/*.PDF ./dummy01 

您也可以复制槽找到命令:

find ./00012524 -name "*.PDF" -exec cp {} ./dummy01/ \; 
+0

我正在使用find命令“省略目录”。/ 00012524''。 – pir 2017-06-21 19:37:01