Я редактирую свой файл .bashrc в истории резервного копирования, но он не работает должным образом - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь написать этот код для моего .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 строк, затем создайте резервную копию файла.

  1. Проверьте, составляет ли .bash_history 99000 строк или более.
  2. Проверьте, существует ли ~/.bash_history.old, если он не использует это имя файла.
  3. Увеличение i на одну цифру больше, чем уже используется в именах файлов. (Filename-4.old)
  4. Проверьте, существует ли более 20 файлов, для которых уже создана резервная копия, и предупредите, если это так.
  5. Установить новое имя файла в переменную.
  6. Убедитесь, что последний файл с цифрой в имени файла старше, чем оригинал.
  7. 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
...