Передача вывода команды rsync в уведомление (в macOS)

Ваш вопрос мне не совсем ясен, но я думаю, мог бы понять, что вы пытаетесь сделать.

Вот этот цикл, который вы используете:

for x in /home/tb/temp/*.pdf
do
    d="${x:4:4}-${x:8:2}-${x:10:2}"
    mkdir -p "$d"
    mv -- "$x" "$d/"
done

Примеры имен файлов, которые вы дали, были:

  1. Dispatch Fax_20180521121901.pdf
  2. Dispatch_20180521124202.pdf

Одна проблема, которая бросается мне в глаза, заключается в том, что ваше выражение подстановки параметра -(d="${x:4:4}-${x:8:2}-${x:10:2}"), похоже, не дает правильных результатов, например.:

> x='Dispatch Fax_20180521121901.pdf'
> d="${x:4:4}-${x:8:2}-${x:10:2}"
> echo ${d}
atch- F-ax

> x='Dispatch_20180521124202.pdf'
> d="${x:4:4}-${x:8:2}-${x:10:2}"
> echo ${d}
atch-_2-01

Вместо этого вы можете попробовать использовать grep, например.:

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | grep -Po '\d{8}')
> echo ${d}
20180521

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | grep -Po '\d{8}')
> echo ${d}
20180521

Или, если вы хотите добавить дефисы, вы можете использовать следующую команду на основеsed--замену:

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | sed -E 's/^[^0-9]*([0-9]{4})([0-9]{2})([0-9]{2}).*$/\1-\2-\3/')
> echo ${d}
2018-05-21

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | sed -E 's/^[^0-9]*([0-9]{4})([0-9]{2})([0-9]{2}).*$/\1-\2-\3/')
> echo ${d}
2018-05-21

Предполагая, что это желаемый результат (, т. е. что вам нужны подкаталоги формы %Y-%m-%d), мы могли бы заменить ваше выражение подстановки параметра -подстановкой команды -на основе grep-. Вместо этого мы получили бы следующий модифицированный цикл:

for filename in /home/tb/temp/*.pdf; do
    datestring=$(echo "${filename}" | sed -E 's/^[^0-9]*([0-9]{4})([0-9]{2})([0-9]{2}).*$/\1-\2-\3/')
    mkdir -p "${datestring}"
    mv -i -- "${filename}" "${datestring}/"
done

Это должно создать подкаталоги вида %Y-%m-%dи заполнить их соответствующими файлами.


ОБНОВЛЕНИЕ:Основываясь на вашем комментарии,похоже, что вам нужны вложенные подкаталоги формы %Y/%m/%d. Для этого вам нужно будет извлечь подстроки года, месяца и дня отдельно, например.:

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | grep -Po '\d{8}')
> year=${d:0:4}
> month=${d:4:2}
> day=${d:6:2}
> echo "${year}/${month}/${day}/"
2018/05/21/

Это приводит нас к следующему циклу:

for filename in /home/tb/temp/*.pdf; do
    datestring=$(echo "${filename}" | grep -Po '\d{8}')
    year=${datestring:0:4}
    month=${datestring:4:2}
    day=${datestring:6:2}
    directory="${year}/${month}/${day}/"
    mkdir -p "${directory}"
    mv -i -- "${filename}" "${directory}"
done
0
14.02.2020, 10:58
1 ответ

Вы должны использовать двойные кавычки, чтобы получить расширение переменной. Чтобы напечатать буквальные двойные кавычки внутри двойных кавычек, вы должны их экранировать:

osascript -e "display notification \"${RSYNC1}\" with title \"Backup\""

В качестве альтернативы используйте одинарные кавычки внутри двойных кавычек:

osascript -e "display notification '${RSYNC1}' with title 'Backup'"
2
28.04.2021, 23:23

Теги

Похожие вопросы