기록 출력에서 ​​정확한 시간과 날짜로 bash 기록을 가져오는 방법은 무엇입니까?

기록 출력에서 ​​정확한 시간과 날짜로 bash 기록을 가져오는 방법은 무엇입니까?

bash 기록이 포함된 파일이 있고 새 컴퓨터에서 명령을 "가져오기"하고 싶습니다. 파일에는 history다음 형식의 출력이 포함됩니다 HISTTIMEFORMAT="%F%t%T%t".

$ history > history.txt

결과는 다음과 같습니다.

    1  2018-01-01   17:56:36    foo
    2  2018-01-01   18:01:21    bar
    3  2018-01-01   18:02:02    buz

~/.bash_history해당 파일의 내용으로 바꾸면 카운터와 날짜 및 시간이 명령의 일부가 됩니다 . 그래서 출력은 다음 history과 같습니다

    1  2018-06-13   18:10:15    1  2018-01-01   17:56:36    foo
    2  2018-06-13   18:10:15    2  2018-01-01   18:01:21    bar
    3  2018-06-13   18:10:15    3  2018-01-01   18:02:02    buz

가져오기 전에 명령 목록을 정리했습니다. 텍스트 편집기에서 열고 ^[\s]+[0-9]+[\s]+[0-9]{4}-[0-9]{2}-[0-9]{2}[\s]+[0-9]{2}:[0-9]{2}:[0-9]{2}[\s]+" "를 빈 문자열로 바꾸세요. 훨씬 나아 보입니다. 그러나 명령 날짜와 시간에 대한 정보가 손실됩니다.

    1  2018-06-13   18:10:15    foo
    2  2018-06-13   18:10:15    bar
    3  2018-06-13   18:10:15    buz

기록을 가져오고 날짜 및 시간 메타 정보를 보존하는 방법은 무엇입니까?

답변1

출력 history은 당신이 읽을 수 있습니다. 실제로 파일을 보면 ~/.bash_history다음과 같은 내용을 찾을 수 있습니다.

#1528908193
history
#1528908354
vim .bash_history 
#1528908359
history
#1528908591
man history
#1528908594

이것이 타임스탬프가 저장되는 방식입니다.

DopeGhoti처럼 scp는 안되나요?

답변2

@찰스 정말 감사합니다귀중한 팁! 그것은 나를 해결책으로 인도합니다.

Bash 기록 항목의 날짜와 시간을 조작하려면 해당 항목을 ~/.bash_history올바른 형식의 원본 파일로 바꾸면 됩니다. 항목의 올바른 형식은 다음과 같습니다.

#TIMESTAMP
command

따라서 내 경우에는 다음 단계를 수행해야 합니다.

(0단계: 기록을 텍스트 파일로 내보내기: history > history.txt.)

1단계: 텍스트 편집기에서 파일을 열고 파일을 정리합니다. 결과적으로 모든 줄에는 date+ space time+ tab+ 가 포함되어야 합니다 command. 제 경우에는 항목 형식이 이므로 %F%t%T%t다음 정규식 기반 대체가 필요합니다.

FROM: ^([\s]+[0-9]+[\s]+)([0-9]{4}-[0-9]{2}-[0-9]{2})[\s]+([0-9]{2}:[0-9]{2}:[0-9]{2}[\s]+)
TO: $2 $3

2단계: 결과를 Calc(또는 Excel)에 복사합니다. 이제 두 개의 열이 있습니다.

3단계: 날짜 및 시간 열의 값을 타임스탬프로 변환합니다.

=(A1 - DATEVALUE("1/1/1970"))*86400

4단계: 타임스탬프와 명령이 포함된 열을 텍스트 편집기에 다시 복사합니다.

5단계: 결과를 대상 형식으로 변환합니다.

FROM: ^([0-9]{10})\t
TO: #$1\n

6단계: ~/.bash_history결과 텍스트 파일을 다음으로 바꿉니다.

$ cp history.txt > ~/.bash_history

관련 정보