Unix cp список аргументов слишком длинный - PullRequest
10 голосов
/ 05 мая 2011

Я использую AIX.

Когда я пытаюсь скопировать все файлы в папке в другую папку с помощью следующей команды:

cp ./00012524/*.PDF ./dummy01

Оболочка жалуется:

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

Как с этим бороться? Моя папка содержит файлы 8xxxx, как я могу скопировать их очень быстро? каждый файл имеет размер от 4x КБ до 1xx КБ.

Ответы [ 6 ]

14 голосов
/ 05 мая 2011

Используйте команду find в * nix:

find ./00012524 -type f -name "*.PDF" -exec cp {} ./dummy01/ \; -print
4 голосов
/ 29 августа 2014

Команда cp имеет ограничение на количество файлов, которые вы можете копировать одновременно.

Одна возможность, которую вы можете скопировать, используя несколько раз базы команд cp на ваших шаблонах файлов, например:

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

Вы также можете скопировать команду find :

find ./00012524 -name "*.PDF" -exec cp {} ./dummy01/ \;
1 голос
/ 05 мая 2011
$ ( cd 00012524; ls | grep '\.PDF$' | xargs -I{} cp {} ../dummy01/ )
0 голосов
/ 18 февраля 2014

Лучшая команда для копирования большого количества файлов из одного каталога в другой.

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

Это мне очень помогло.

0 голосов
/ 05 мая 2011

Флаг -t для cp полезен здесь:

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

0 голосов
/ 05 мая 2011

Вы должны быть в состоянии использовать цикл for, например,

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

У меня нет способа проверить это, но это должно работать теоретически.

...