Слишком длинный список аргументов при копировании файлов

Я думаю, что утверждение «Windows - это не бедный человек Linux» - это преднамеренный подход к большинству мышления людей, которые думают, что Linux - это бедный человек Windows (потому что он ничего не стоит). Я согласен с комментариями Элиа Кагана в этой теме. Отмена ролей в заявлении заставляет людей немного подумать о том, что понимается под «бедными», и это явно не означает деньги.

1
задан 13 April 2017 в 15:23

2 ответа

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

for i in *; do cp "$i" ../prjshp/; done
8
ответ дан 25 May 2018 в 04:21
  • 1
    Это работает для меня. – 1rq3fea324wre 15 November 2017 в 22:38
  • 2
    Простой и эффективный. У меня была аналогичная проблема, удаляющая ~ 1/4 миллиона jpegs, которые я извлек из видео для проекта. Это тот подход, который я использовал. – Elder Geek 26 November 2017 в 20:17

IMHO, оптимальными инструментами для работы с ордами файлов являются find и xargs. См. [F4]. См. [F5]. find с его переключателем -print0 создает NUL -сепаратированный список имен файлов (имена файлов могут содержать любой символ execpt NUL или /), который xargs понимает, используя переключатель -0. xargs затем строит самую длинную команду, разрешенную (большинство имен файлов, без полуфинала в конце) и выполняет ее. xargs повторяет это, пока find не добавит больше имен файлов. Запустите xargs --show-limits </dev/null, чтобы увидеть пределы.

Чтобы решить вашу проблему, (и после проверки man cp найти --target-directory=):

find . -maxdepth 1 -type f -name '*.prj' -print0 | xargs -0 cp --target-directory=../prjshp/
1
ответ дан 25 May 2018 в 04:21

Другие вопросы по тегам:

Похожие вопросы: