Я пытаюсь написать этот код для моего .bashrc
файла, чтобы сделать резервную копию моего .bash_history
, но я не могу понять окончание, это код, который не работает:
if [ $name -ot "$name-$minus$old" ]
then
printf "%s\n" ".bash_history will be cleared soon, backing up....!"
cp ~/.bash_history "$new_name"
fi
Как предотвратить создание нового файла при каждом запуске shell/terminal
и выполнении условия (wc -l < ~/.bash_history) >= 99000
?
Код должен делать это:
Создайте резервную копию моего .bash_history
файла, если он имеет размер 1000 строк или менее из заданного размера HISTSIZE=100000
и HISTFILESIZE=100000
строк, затем создайте резервную копию файла.
- Проверьте, составляет ли
.bash_history
99000 строк или более.
- Проверьте, существует ли
~/.bash_history.old
, если он не использует это имя файла.
- Увеличение
i
на одну цифру больше, чем уже используется в именах файлов. (Filename-4.old)
- Проверьте, существует ли более 20 файлов, для которых уже создана резервная копия, и предупредите, если это так.
- Установить новое имя файла в переменную.
- Убедитесь, что последний файл с цифрой в имени файла старше, чем оригинал.
cp
файл в new_name
Вот код:
if (( $(wc -l < ~/.bash_history) >= 99000 ))
then
name=~/.bash_history
old=.old
if [[ ! -e ~/.bash_history.old ]]
then
printf "%s\n" ".bash_history will be cleared soon, backing up....!"
cp $name ~/.bash_history.old
else
i=0
if [[ -e $name$old ]]
then
while [[ -e "$name-$i$old" ]]
do
let i++
done
fi
if [[ "$i" -ge 20 ]]
then
printf "%s\n" "You need to arhive your history files they are mounting up!!!"
fi
new_name=$name-$i$old
minus=$(( i - 1 ))
if [ $name -ot "$name-$minus$old" ]
then
printf "%s\n" ".bash_history will be cleared soon, backing up....!"
cp ~/.bash_history "$new_name"
fi
fi
fi
Это результат shellcheck.net
:
Line 16:
let i++
^-- SC2219: Instead of 'let expr', prefer (( expr )) .
Я учусь, но сейчас я действительно дурацкий программист. Это то, что я придумал, пожалуйста, дайте мне обратную связь и совет:
########################333############# backup history
if (( $(wc -l < ~/.bash_history) <= 99900 ))
then
name=~/.bash_history
old=.old
if [[ ! -e "$name""$old" ]]
then
printf "%s\n" "##################################################" ".bash_history will be cleared soon, backing up....!" "##################################################"
cp "$name" "$name""$old"
else
incre=0
if [[ -e "$name""$old" ]]
then
while [[ -e "$name"-"$incre""$old" ]]
do
(( incre++ ))
done
fi
if [[ "$incre" -ge 20 ]]
then
printf "%s\n" "********************************************************" "You need to arhive your history files they are mounting up!!!" "**************************************************************"
fi
# collect both times in seconds-since-the-epoch
twelve_days_ago=$(date -d 'now - 12 days' +%s)
file_time=$(date -r "$name" +%s)
new_name="$name"-"$incre""$old"
increMinusOne=$(( incre - 1 ))
#answer=""
#printf "%s\n" "Do you want to backup 'bash_history' now?"
#read -r answer
#if [[ "$answer" == "y" ]] || [[ "$answer" == "Y" ]]
#minus=$(( i - 1 ))
if [ -e "$name-$increMinusOne$old" ]
then
if [ $name -ot "$name-$increMinusOne$old" ]
then
printf "%s\n" "##################################################" ".bash_history will be cleared soon, backing up....!" "##################################################"
cp "$name" "$name-$increMinusOne$old"
fi
elif [ -e "new_name" ]
then
new_time=$(date -r "$new_name" +%s)
if [ "$name" -nt "$new_name" ] && (( $(wc -l < "$name") > $(wc -l < "$new_name") ))
then
printf "%s\n" "##################################################" ".bash_history will be cleared soon, backing up....!" "##################################################"
cp "$name" "$new_name"
# ...and then just use integer math:
elif (( new_time <= twelve_days_ago ))
then
echo "$new_name is older than 12 days"
printf "%s\n" "##################################################" ".bash_history will be cleared soon, backing up....!" "##################################################"
cp "$name" "$new_name"
fi
else
printf "%s\n" "##################################################" ".bash_history will be cleared soon, backing up....!" "##################################################"
cp "$name" "$new_name"
fi
fi
fi