Найти в Дзене

Как копировать файлы с определённым расширением рекурсивно в Linux

Копирование файлов по их расширению — частая задача при работе с
файловой системой Linux. В этой статье я подробно расскажу, как
эффективно копировать файлы с заданным расширением, включая все
подкаталоги. Базовый синтаксис команды cp: cp файл1 файл2 целевая_папка/ Для копирования по расширению используйте символы подстановки: cp *.jpg *.png изображения/ Ограничение: этот метод не работает рекурсивно для подкаталогов. Для копирования всей структуры папок используйте флаг -r: cp -r исходная_папка/ целевая_папка/ Но этот метод копирует все файлы, а не только с нужным расширением. Для рекурсивного копирования только файлов с определённым расширением используйте: find исходная_папка -name '*.jpg' -exec cp {} целевая_папка/ \; Где: find исходная_папка -name '*.jpg' | xargs cp -t целевая_папка/ 1. Копировать несколько расширений: find . \( -name '*.jpg' -o -name '*.png' \) -exec cp {} целевая_папка/ \; 2. Создать целевую папку, если её нет: mkdir -p целевая_папка && find . -name '*.jpg' -
Оглавление

Копирование файлов по их расширению — частая задача при работе с
файловой системой Linux. В этой статье я подробно расскажу, как
эффективно копировать файлы с заданным расширением, включая все
подкаталоги.

Основные способы копирования файлов

-2

Простое копирование с помощью cp

Базовый синтаксис команды cp:

cp файл1 файл2 целевая_папка/

Для копирования по расширению используйте символы подстановки:

cp *.jpg *.png изображения/

Ограничение: этот метод не работает рекурсивно для подкаталогов.

Рекурсивное копирование всех файлов

Для копирования всей структуры папок используйте флаг -r:

cp -r исходная_папка/ целевая_папка/

Но этот метод копирует все файлы, а не только с нужным расширением.

Решение: комбинация find и cp

Для рекурсивного копирования только файлов с определённым расширением используйте:

find исходная_папка -name '*.jpg' -exec cp {} целевая_папка/ \;

Где:

  • исходная_папка — где искать файлы
  • '*.jpg' — шаблон расширения
  • целевая_папка — куда копировать
-3

Альтернативный вариант с xargs:

-4
find исходная_папка -name '*.jpg' | xargs cp -t целевая_папка/

Полезные модификации

1. Копировать несколько расширений:

find . \( -name '*.jpg' -o -name '*.png' \) -exec cp {} целевая_папка/ \;

2. Создать целевую папку, если её нет:

mkdir -p целевая_папка && find . -name '*.jpg' -exec cp {} целевая_папка/ \;

3. Сохранить структуру подкаталогов:

find . -name '*.jpg' -exec cp --parents {} целевая_папка/ \;

Обработка большого количества файлов

Для тысяч файлов лучше использовать:

find . -name '*.jpg' -print0 | xargs -0 cp -t целевая_папка/

Опция -print0 и -0 корректно обрабатывают файлы с пробелами в именах.

Заключение

Логика выбора между cp, find -exec, xargs и rsync для копирования файлов в Linux
Логика выбора между cp, find -exec, xargs и rsync для копирования файлов в Linux

Теперь вы знаете несколько способов рекурсивного копирования файлов по расширению:

  • Простое копирование cp для текущего каталога
  • Комбинация find и cp для рекурсивного поиска
  • Методы для обработки тысяч файлов
  • Варианты с сохранением структуры каталогов

Дополнительные советы:

  • Всегда проверяйте наличие целевой папки перед копированием
  • Для очень большого количества файлов рассмотрите rsync
  • Используйте -v для вывода информации о процессе копирования

Если у вас есть вопросы или интересные случаи из практики — делитесь в комментариях!

Дополнительные материалы: