Это не имеет ничего общего с sftp
. Вам просто нужны определенные разрешения, установленные для нужного каталога. Вы можете использовать at
для постановки в очередь действия ожидания, например. чтобы снова изменить разрешения через некоторое время.
Команда date довольно проста (на первый взгляд ). Но может стать более сложным, если вы немного глубже заглянете в его структуру значений.
Простейшая команда даты требует ввода «момент времени» и печатает значение «момент времени» (с дополнительными изменениями в соответствии с запрошенным форматом ). Если бы мы полагались на формат вывода по умолчанию, мы могли бы сделать:
$ from='2020-08-11T03:02'
$ date -d "$from"
Tue 11 Aug 2020 03:02:00 AM EDT
Это предполагает, что локальный набор в компьютере находится в New_York
. И эта дата будет использовать TZ по умолчанию, установленную как для ввода, так и для вывода.
Или явно:
TZ="America/New_York" date -d "$from"
Tue 11 Aug 2020 03:02:00 AM EDT
Это та же дата, что и для ввода from='2020-08-11T03:02'
, поскольку дата применяет установленную TZ как к вводу, так и к выводу, если нет дополнительной информации.
Но входная строка может быть (также ), записанной как:
from='2020-08-11T07:02 +0000' # Please note the 7 (instead of 3).
Тот же самый момент времени, как если бы пользователь смотрел на время в формате UTC.
$ TZ="America/New_York" date -d "$from"
Tue 11 Aug 2020 03:02:00 AM EDT
И та же команда выдает то же значение времени в Нью-Йорке, что и раньше, но входное значение было другим. Это могло быть местное время кого-то в Индии :
.$ from='2020-08-11T12:32+0530'
$ TZ="America/New_York" date -d "$from"
Tue 11 Aug 2020 03:02:00 AM EDT
Что приводит к тому же значению и «моменту времени» в Нью-Йорке.
Чтобы получить локальную строку , использованную выше, вам нужен формат %z
:
from='2020-08-11T12:32+0530';TZ="Asia/Kolkata" date -d "$from"
Tue 11 Aug 2020 12:32:00 PM IST
from='2020-08-11T12:32+0530';TZ="Asia/Kolkata" date -d "$from" +'%c %z'
Tue 11 Aug 2020 12:32:00 PM IST +0530
Который все тот же "момент времени" в Нью-Йорке:
from='2020-08-11T12:32+0530';TZ="America/New_York" date -d "$from" +'%c %z'
Tue 11 Aug 2020 03:02:00 AM EDT -0400
Это одно из применений формата %z
.
Дело в том,:что строка времени не уникальна, если она также не содержит значение «часового пояса», используемого для генерации такой строки времени.
Я использовал числовые значения выше для часового пояса :from='2020 -08 -11T12 :32+0530'
Но также возможно (и рекомендуется )использовать базу данных Олсона значения:
from='TZ="Asia/Kolkata" 2020-08-11T12:32';
TZ="America/New_York" date -d "$from" +'%c %z'
Tue 11 Aug 2020 03:02:00 AM EDT -0400
Значения в базе данных Olsen не меняются в зависимости от «летнего времени». Он не меняется с EST на EDT в «Нью-Йорке» в какую-то (, вероятно, неизвестную пользователям из других стран дату )года. Это стабильно.
TZ="America/New_York" date -d 'TZ="America/New_York" 01/01/20 03:30'
Wed 01 Jan 2020 03:30:00 AM EST
TZ="America/New_York" date -d 'TZ="America/New_York" 07/01/20 03:30'
Wed 01 Jul 2020 03:30:00 AM EDT
Используя эту концепцию, преобразования строк местного времени возможны (и просты )для городов как на севере, так и на юге:
$ ddate(){ TZ="$toTZ" date -d 'TZ="'"$fromTZ"'" '"$1" +'%c %z'; }
$ toTZ='America/New_York'
$ fromTZ='Africa/Johannesburg' # Which is in the south but has no DST.
$ ddate '1/1/20';ddate '4/1/20'; ddate '7/1/20'
Tue 31 Dec 2019 05:00:00 PM EST -0500
Tue 31 Mar 2020 06:00:00 PM EDT -0400
Tue 30 Jun 2020 06:00:00 PM EDT -0400
$ fromTZ='Pacific/Auckland' # Which has a DST set.
$ ddate '1/1/20';ddate '4/1/20'; ddate '7/1/20'
Tue 31 Dec 2019 06:00:00 AM EST -0500
Tue 31 Mar 2020 07:00:00 AM EDT -0400
Tue 30 Jun 2020 08:00:00 AM EDT -0400
Note the three **different** times 6, 7 and 8.