Найти и скопировать все изображения, сохраняя структуру папок

Я пытаюсь найти и скопировать все изображения из одного места в другое, сохраняя структуру папок. Я попытался с помощью следующей команды:

 sudo find . -type f -exec file {} \; | awk -F: '{ if ($2 ~/[Ii]mage|EPS/) print $1}'  | cpio -pdm  /media/newlocation

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

find: `file' terminated by signal 13

Что не так с командой? Есть ли лучший способ сделать это?

С уважением

2 ответа

Решение

Я не уверен, почему вы получите sigpipe.

Вместо того, чтобы позволить find выполнить exec, вы можете попробовать:

находить. тип f -print | файл xargs | ах....

То есть - просто дайте команде find распечатать их и файл xargs для запуска команды file.

Обратите внимание, что ваша команда sudo выполнит поиск, но она не будет выполнять sudo всю строку. Это доставит вам больше хлопот (если вам вообще понадобится sudo).

Вы можете использовать rsync для копирования одного каталога в другой. Если вам нужны только некоторые конкретные файлы, не стесняйтесь использовать --exclude а также --include вариант.

rsync -avz --include='[iI]mage' --include='EPS' --exclude='*' source/ output/

Для проверки команды добавьте параметр rsync --dry-run:

--dry-run выполнить пробный запуск без изменений

Вы можете найти некоторые примеры параметров включения rsync в этой теме.

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