Как стать автором
Обновить

Как в linux консоли скопировать файлы и папки исключая некоторые из них по регулярному выражению

Настройка Linux
Здравствуйте, хабражители.

Не судите строго, я новичёк в linux-е и это мой первый пост на хабре, но может кому-то похожему на меня он окажется полезным.

Столкнулся с необходимостью решить задачу, описанную в заголовке. Готового решения не нашёл. Написал sh скрипт (cpexclude.sh), который сначала копирует всё, а потом удаляет лишнее:

#!/bin/bash
if [ $# -lt 3 ] ; then
	echo "cpexclude usage: pathFrom pathTo excludeRegex"
	exit 0
fi
pathFrom=$1
pathTo=$2
excludeRegex=$3
# Copy everything
echo `cp -a $pathFrom/. $pathTo`
# Delete by excludeRegex
echo `find $pathTo -regex $excludeRegex -delete`

Добавил его в ~/.bashrc

alias cpexclude='/path/to/cpexclude.sh'

Пользуюсь время от времени.
Если у кого-нибудь на уме есть более приемлемое решение, милости прошу.

Upd. Я не до конца описал задачу. Есть ещё необходимость в том, чтоб сохранялась структура поддиректорий копируемой директории и чтоб копировались сами поддиректории, а не только находящиеся в них файлы.

Upd2. В комментарих подсказали:
  • rsync -r --exclude=PATTERN from/ to/
    

  • SRC=~/work/soruce; DEST=~/work/test; REGEXP=js; pushd $SRC; for I in $(find ./ | grep -v "$REGEXP"); do if [ -d $I ]; then mkdir $DEST/$I; else cp $I $DEST/$I; fi; done; popd 2>/dev/null
    
Теги:linux bash scriptscpregexp
Хабы: Настройка Linux
Всего голосов 46: ↑25 и ↓21 +4
Просмотры20.3K

Похожие публикации

Linux администратор
до 120 000 ₽ТИТАН-2Санкт-ПетербургМожно удаленно
Системный администратор Linux/Senior
от 50 000 до 120 000 ₽NetPingМожно удаленно
Старший системный администратор Linux/DevOps
до 250 000 ₽Онлайн-кинотеатр iviМоскваМожно удаленно
C++ Embedded Developer (Linux)
от 150 000 до 250 000 ₽MicroAviaСанкт-Петербург
C++ Developer (Linux)
от 150 000 до 250 000 ₽MicroAviaСанкт-Петербург

Лучшие публикации за сутки