Вы можете быстро сделать это в bash:
mapfile -t lines < file
printf "%s\n" "${lines[@]:1}" "${lines[0]} $(date "+%F %T")" > file
Помещение этого в функцию:
rotate_file() {
[[ -w "$1" ]] || return 1
local -a lines
mapfile -t lines < "$1"
printf "%s\n" "${lines[@]:1}" "${lines[0]} $(date "+%F %T")" > "$1"
}
Демо:
$ cat file
1
2
3
$ rotate_file file
$ cat file
2
3
1 2019-07-25 17:16:51
$ rotate_file file
$ cat file
3
1 2019-07-25 17:16:51
2 2019-07-25 17:16:57
При этом весь файл помещается в память. Если файл большой, это может быть медленным.