Копирование - одна из самых базовых задач в Linux. Однако, если вам нужно исключить определённые файлы или каталоги при копировании, стандартная команда
cp требует небольшой хитрости. Разберём, как это сделать и при чём здесь rsync.Когда и зачем исключать файлы?
Чтобы пропустить временные файлы (*.tmp, *.swp).
Чтобы избежать копирования тяжёлых или ненужных данных.
Для создания точных копий без избыточной информации.
Исключения с помощью cp и find. Хотя
cp сам по себе не поддерживает флаг исключений, можно комбинировать его с другими командами, такими как find.Пример: исключение файлов *.log:
find source_dir -type f ! -name '*.log' -exec cp --parents {} target_dir \;
Разбор:
find source_dir - ищет файлы в директории.
! -name '*.log' - исключает файлы с расширением .log.
-exec cp --parents {} - копирует файлы с сохранением структуры каталогов.
Использование rsync для исключений. Для более гибкого копирования предпочтительнее использовать rsync, так как он поддерживает исключения через опцию --exclude.
Пример: исключение определённой папки и файлов
rsync -av --exclude 'temp/' --exclude '*.log' source_dir/ target_dir/
Разбор:
-a - архивный режим (сохраняет права, ссылки, структуру).
-v - выводит процесс копирования.
--exclude - исключает указанную папку или файлы.
Вывод команды:
sending incremental file list
./
file1.txt
file2.txt
sent 125 bytes received 40 bytes 330.00 bytes/sec
total size is 245 speedup is 1.41
Исключение на уровне шаблонов. Если нужно исключить файлы по сложному шаблону, используйте файл исключений.
Пример: исключение через файл шаблонов
Создайте файл exclude.txt:
*.log
temp/
backup/
Выполните команду:
rsync -av --exclude-from='exclude.txt' source_dir/ target_dir/
Копирование больших данных с исключениями. Если копируете большие объёмы данных, используйте rsync вместо cp, так как он эффективнее обрабатывает большие деревья файлов и поддерживает докопирование (resume).
Докопирование файлов после прерывания:
rsync -av --exclude '*.tmp' source_dir/ target_dir/
Хотя
cp - базовый инструмент, его возможности можно расширить комбинацией с find для сложных задач. Для регулярной работы с исключениями rsync остаётся лидером.BashTex 📱 #linux #utils