Файлы копии от одной папки до другой папки в определенном диапазоне дат

Я уже использую ниже команды для копирования файлов с определенной даты.

Ранее я использовал эту команду, и она работала хорошо, но теперь она показывала ошибку:

-bash: /bin/cp: Argument list too long

Рекомендует используемый:

cd /share/new/
cp `find . -type f -newermt '16 july 2018'` /share/test

Я должен скопировать все файлы в папке, "в новинку" с 20-го июля для сегодня даты. Как я могу достигнуть этого?

4
задан 25 September 2018 в 02:08

4 ответа

Не использовать cp непосредственно с выводом find.

Это могло бы передачи путем многие также файлы в одноэтапном (и вот почему Вы получаете ошибку Argument list too long).

Используйте -exec параметр find, которые выполняют данную команду, передающую каждый подобранный файл cp, по одному:

cd /share/new/
find . -type f -newermt '16 july 2018' -exec cp {} /share/test \;
9
ответ дан 23 November 2019 в 11:42

Вы должны попробовать этот синтаксис:

find /share/new/ -type f -newermt '16 july 2018' -exec cp -R /share/test/ {} \;
-1
ответ дан 23 November 2019 в 11:42

используйте find -exec:

find /share/new/ -type f -newermt '16 july 2018' -exec cp {} /share/test \;
3
ответ дан 23 November 2019 в 11:42

Используйте -exec действие find и -t опция cp; Я также рекомендую -i или -n опции, если Вы не хотите перезаписывать тождественно названные файлы случайно:

find ... -exec cp -i -t TARGET -- {} +

Другие текущие ответы порождают a cp дочерний процесс для каждого файла соответствия, в то время как этот ответ только порождает столько же по мере необходимости на основе общего предела длины аргумента программы (см. ниже), который будет иметь большое значение, после того как Вы достигаете нескольких тысяч соответствий, который, кажется, Ваш случай.


От find(1) руководство:

  • -exec command ; – Выполните команду […]. Весь после аргументов для нахождения взят, чтобы быть аргументами команде до аргумента, состоящего из ; встречен. Строка {} заменяется текущим именем файла, обрабатываемым везде, оно происходит в аргументах команде […]. Указанная команда выполняется однажды для каждого подобранного файла. […]

  • -exec command {} + – Этот вариант -exec действие выполняет указанную команду на выбранных файлах, но командная строка создается путем добавления каждого выбранного имени файла в конце; общее количество вызовов команды будет намного меньше, чем количество подобранных файлов. […]

От cp(1) руководство:

  • -t, --target-directory=DIRECTORY – скопируйте все ИСХОДНЫЕ аргументы в КАТАЛОГ
  • -i, --interactive – подсказка перед перезаписью
  • -n, --no-clobber – не перезаписывайте существующий файл
0
ответ дан 23 November 2019 в 11:42

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

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