$ sudo install -o angelo -g apache /dev/null angelo-file
У меня работает на centos 6
, установите версию 8.4. Здесь установка «копирует» (, который, как известно, всегда является пустым)/dev/null
файлом в цель, тем самым создавая ваш пустой файл, в то время как в той же/одной команде устанавливается владелец и группа целевого файла, потому что он запускается от имени пользователя root через sudo.
Подробнее об этом читайте в:man install
или install --help
. Он может создавать каталоги и устанавливать режимы разрешений в одной/одной команде. Команда install часто используется в инструментах сборки, таких как make-файлы.
Вы также можете использовать параметр -T
, поэтому, если target уже существует, но является каталогом, произойдет сбой с ошибкой, а вместо этого не будет создан пустой angelo-file/null
.
РЕДАКТИРОВАТЬ :ОП спросил о rsync, да. Начиная с rsync 3.1.2, см. такие параметры, как --chmod
, --chown
, --usermap
, --groupmap
. (Для centos 6
я могу получить более новую версию rsync из репозитория iUS ).
Предполагая, что у вас есть GNU awk
в качестве третьего аргумента match()
, на ум приходит следующая программа:
awk '/IsComplete=True/{match($0,"ExposureName=([^,]+)",a); print $2,$3,a[1]}' *.log
Это сопоставит все строки, содержащие строку IsComplete=True
, и извлечет шаблон «ExposureName=
, за которым следуют любые символы, отличные от ,
», и поместит последнюю часть (, которая является именем файла ). ] в группе захвата, которая будет храниться в переменной массива a
.
Затем будет напечатано второе и третье "слово" (разделенное пробелом -поле ), которые содержат дату и время, а затем содержимое группы захвата из вызова match()
.
Для вашего примера я получаю
06Nov20 13:48:11.838: foobar.tif
Если вы хотите избавиться от части мс -временной метки, вы можете использовать gensub()
для изменения этого поля:
awk '/IsComplete=True/{match($0,"ExposureName=([^,]+)",a); print $2,gensub(/\..*$/,"","1",$3),a[1]}' *.log
Обратите внимание, что нумерация полей ($2
,$3
)сильно зависит от наличия/отсутствия пробелов, т.к. именно так awk
по умолчанию разбивает строку на поля; поэтому, если формат метки времени когда-либо изменится (, например. к 06 Nov 20
), вам нужно будет адаптировать синтаксис в операторе print
.
Использованиеsed
:
sed -E '/IsComplete=True/{
s/^[^ ]* ([^.]*)\..*ExposureName=([^,]*),.*/\1 \2/;
}' *.log