Либо ls
, либо grep
добавляются цветовые коды; вероятно, где-то есть псевдоним, включающий --color=always
. (Что касается вашего вопроса -, все активные псевдонимы отображаются при запуске alias
.)
В любом случае парситьls
не следует. Используйтеfind
(вариант GNU )вместо:
find. -maxdepth 1 -regextype posix-extended -regex '.*/file[1-9]{2,3}.txt' -delete
(Вы также должны изменить свой псевдоним, чтобы использовать --color=auto
.)
Дата эпохи фиксирована. Поскольку вам нужно будет выполнять операции с 1950 года, это возможно для 32-битного времени Unix.
Даже если число отрицательное, вы можете сложить две точки.
С 1950 по 1970 + С 1970 по настоящее время:
#Get the current date time timestamp
d1="$(date +%s)"
#Get the timestamp from <date> to 1970 and remove negative sign
d2="$(date +%s --date "10 March 1950" | sed 's/-//g')"
#Perform addition of both timestamps
res="$((d1+d2))"
echo "$res" # Output 2235228403
Другой подход :начинается с 1950 года, за 0 дней до него, и просто добавляется количество дней для каждого года в качестве начального -значения выключения. Как это может выглядеть:
Создать массив с суммой дней за предыдущие годы для каждого года:
#!/bin/bash
ndays[1950]=0
for i in {1951..2020} ; do
ndays[i]=$(( ${ndays[i-1]}+$(date +%j --date "31 dec $((i-1))" ) ))
done
Теперь ваш новый идентификатор дня представляет собой просто начальное значение (суммы дней за все предыдущие годы с 1950 года )и дня года текущей даты.
date="22 May 1975"
year=$(cut -d' ' -f3 <<<$date)
dayID=$(( ${ndays[year]} + $(date --date "$date" +%-j) ))
(Примечание :обязательно используйте %-j
, а не %j
, иначе bash будет рассматривать первые 99 дней года как восьмеричные значения из-за ведущего 0.)