Реализация описания @Krzysztof Stasiak может быть такой.
Сначала создайте несколько тестовых каталогов:
cd /backup
mkdir Full/20170{1,7}02
mkdir Incremental/2017010{1..9}
mkdir Incremental/2017070{1..9}
И сценарий:
#! /bin/bash
cd /backup
for P in Full Incremental; do
cd $P
for D in *; do
[ $(date -d '-90 days' +%Y%m%d) -gt $D ] && rm -rf $D
done
cd..
done
Для проверки вы можете поставить echo
перед rm
, чтобы увидеть, что будет сделано, но не делая этого.
Здесь мы просто cd
переходим в главный каталог и запускаем циклfor
-для двух каталогов:
cd /backup
for P in Full Incremental; do
затем перейдите в каталог "periode":
cd $P
затем выполните for
цикл по всем каталогам:
for D in *; do
если сегодня минус 90 дней больше -, чем -gt
каталог$D
:
[ $(date -d '-90 days' +%Y%m%d) -gt $D ]
, затем удалите каталог:
&& rm -rf $D
Вы также можете написать это как:
if [ $(date -d '-90 days' +%Y%m%d) -gt $D ]; then
rm -rf $D
fi
Рассмотрите возможность использования стандартного программного обеспечения для резервного копирования. Это может быть Бакула.
Преобразование ключа Alt
вEscape
(ASCII 033,"\e"
)выполняется вашим эмулятором терминала, библиотека readline (, которая обрабатывает ~/.inputrc
), не участвует в этом.
Проблема в том, что нет способа отправить фактические события клавиш в программу, работающую в терминале; терминал преобразует их в последовательности байтов, которые программа может прочитать с tty.
Для клавиши Alt/Meta есть два способа сделать это:
Сопоставьте его с Escape (ASCII 033 / 0x1b)--нажатие Alt-K
фактически отправит "\ek"
,Alt-Shift-K
"\eK"
и т. д. Это значение по умолчанию в большинстве эмуляторов терминала, но обычно оно настраивается, и у вас есть все причины, чтобы сделать его по умолчанию, если это уже не так.
Включите старший 7-й бит значения ASCII клавиши --. Нажатие Alt-K
фактически отправит байт 0x6b | 0x80 = 0xeb
, где 0x6b
является значением ASCII "k"
.
Именно последний распознается как "\M-k"
в привязках readline.
И это не работает и ужасно нарушается с любыми многобайтовыми локалями, такими как en_US.UTF-8
(, которые используются по умолчанию в большинстве современных систем ). В такой системе эмулятор терминала может не отправлять необработанный 0xeb
байт (, который не является допустимой последовательностью UTF -8, а является двоичным мусором ), но может преобразовать его из ISO -8859 -. ] 1 в UTF -8, что приводит к отправке"\xc3\xab" = "ë"
(e
с диэрезисом )при нажатии Alt-K
.
Но readline не знает, как сопоставить "ë"
обратно с "\M-k"
, сколько бы вы ни возились с множеством опций, таких как convert-meta
, enable-meta-key
, input-meta
и т. д.
И даже если бы вы могли это сделать, это все равно было бы сломано, потому что люди могут на самом деле захотеть ввести "ë"
и "ó"
и не оценят, что они обрабатываются как несвязанные ключи, такие как Alt-K
и Alt-S
.
Вы должны обнаружить, что \e
— это экранирующий символ (, что означает, что есть только один из них, код символа 27, часто пишется как ESC
), а не как экранирующий символ . (означает один из нескольких ).
Я думаю, что в данном случае документация пытается сказать, что \e
представляет экземпляр символа ESC, так что можно было бы написать \e\e
для двух символов ESC.
Он не представляет ALT.