텍스트 파일이 생성되는 스크립트를 실행합니다. 이름을 file-a.txt로 지정합니다. 그런 다음 동일한 스크립트를 다시 실행하면 동일한 file-a.txt를 덮어쓰지만 물론 새 콘텐츠가 있는 경우에도 마찬가지입니다. 그것은 중요하지 않습니다. 하지만 이제는 스크립트를 실행할 때마다 해당 file-a.txt를 유지하고 다시 실행할 때 새 "file-a.txt"가 최신 새 파일이 되고 "file-a.txt"가 되기를 원합니다. " 이제 이전의 최신 파일입니다. 따라서 스크립트를 실행한 후에는 항상 최신 파일이 생성되고 이전 파일만 유지하면 됩니다. 내가 올바르게 설명했으면 좋겠다. 예:
- File-a.(첫 번째 파일 생성) 2. 스크립트를 다시 실행합니다. 이제 file-a가 최신이지만 이전 파일-a의 내용을 유지하고 싶습니다.
나는 다음과 같은 파일의 복사본을 만들어 보았습니다.
- cp file-a file-a-old를 시도했지만 성공하지 못한 채 다른 방법을 시도했습니다.
답변1
스크립트에서 mv -b
이전 파일을 덮어쓰는 데 사용할 수 있는 임시 파일을 생성하도록 합니다. mv
백업이 생성됩니다 file-a.txt~
.
-b, --backup[=CONTROL]
각 기존 대상 파일 백업
script_generating_tmp_file && mv -b "file-a.txt.tmp" "file-a.txt"
당신은 얻을 것이다:
$ ls -1
file-a.txt # <-- latest file
file-a.txt~ # <-- previous file
답변2
원본 스크립트를 호출하는 새 스크립트를 작성할 수 있습니다. 원본 스크립트의 이름 original-script
이 다음과 같다고 가정합니다 wrapper-script
.
#!/usr/bin/env bash
# Save a copy of latest file-a.txt before generating a new one;
# but don't bother trying if file-a.txt does not exist.
if test -f file-a.txt; then
cp -a file-a.txt file-a-old.txt
fi
original-script # Run script that generates file-a.txt here.
논리는 다음과 같습니다.
처음 통과할 때는 아직 거기에 없어야 하므로 file-a.txt
생성 file-a-old.txt
되지 않습니다. 기존 스크립트가 생성되지만 file-a.txt
아무것도 생성되지 않습니다 file-a-old.txt
.
다른 시간은 모두 file-a.txt
존재하므로 이라는 복사본을 만듭니다 file-a-copy.txt
. 현재 2개의 동일한 파일이 있습니다: file-a.txt
및 file-a-old.txt
. original-script
실행하면 덮어쓰지만 file-a.txt
그대로 file-a.old.txt
유지됩니다.
original-script
사용 사례에 적합한 경우 이 논리를 자체에 추가할 수도 있습니다. 그렇지 않으면 실행 wrapper-script
하고 original-script
원하는 동작을 얻지 못할 수 있습니다.
답변3
logrotate를 사용하여 두 개의 파일 백업을 만들 수 있습니다. 이렇게 하면 다음과 같은 이점을 얻을 수 있습니다.
file
file.1
file.2
먼저 다음과 같이 구성 파일을 만듭니다.
<path to your file> {
rotate 2
daily
size 1
notifempty
missingok
}
그럼 넌 달려가
logrotate -f <path to config file>
-f
daily
필수를 의미하며 구성 파일의 설정을 무시합니다. 하루가 가장 짧은 시간이라 생략해도 될지 모르겠네요. -f
마지막 날에 회전했다면 균등하게 회전했는지 확인하세요. 제 생각에는 다른 옵션( size
, notifempty
,...)도 무시될 것 같습니다 -f
.
더 많은 오래된 사본을 원하면 옵션 수를 늘리십시오 rotate
.