2011-05-05 58 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