Esto será menos eficiente, pero la tarea encaja muy bien con cut
ypaste
paste -d '|' <(cut -d'|' -f1-2 file.log) <(cut -d'|' -f3 file.log | grep -oP 'modesc=\K\S+')
Вы уже используете include
; каждая строка, начинающаяся с +
, является правилом включения; каждая строка, начинающаяся с -
, является правилом исключения.
Если вы хотите включить только определенные файлы в определенный каталог, вам, к сожалению, придется это указать.Ваш файл фильтра становится:
+ /dir_1/***
+ /dir_2/
+ /dir_2/**.c++
+ /dir_2/**.h
+ /dir_2/**/
- /dir_2/**
+ /dir_etc/***
- /*
Сначала вы должны убедиться, что dir_2
включено:+ /dir_2/
.
Затем вы включаете все *.c++
и все *.h
файлы в этом dir_2
; помните, что **
соответствует всем символам, включая косую черту.
Затем вы также должны включить все каталоги в пределах dir_2
:+ /dir_2/**/
, иначе файлы в подкаталогах не будут найдены, так как эти подкаталоги исключены.
Наконец, исключите все остальные файлы.
Обратите внимание, что вы также можете использовать файлы слияния каталогов -, поэтому rsync будет проверять каждый каталог на наличие заданного имени файла и, если найдет, использовать этот файл в качестве дополнительного фильтра для этого каталога. См. параметр -F
на странице руководства.