파일과 다음 파일을 순서대로 생성하려면 스크립트가 필요합니다. 스크립트를 실행할 때마다 하나의 파일만 생성되어야 하며 특정 날짜에 스크립트를 0번 이상 실행할 수 있습니다. 파일 이름은 현재 날짜를 따라 지정되어야 하며, %y%m%d
두 번째 파일을 추가하거나 -01
특정 날짜에 생성된 세 번째 파일 등을 추가하는 형식 이어야 합니다 -02
. 예를 들어:
20170125.txt // first file create on the day.
20170125-01.txt // 2nd file
20170125-02.txt // 3rd file
지금까지 첫 번째 일일 파일을 생성하기 위한 매우 기본적인 스크립트가 있지만 그 이후에 증분 번호 매기기를 수행하는 방법이 혼란스럽습니다.
#! /bin/bash
DATE=`date +%Y%m%d`
touch "$DATE.txt"
답변1
today=$( date +%Y%m%d ) # or: printf -v today '%(%Y%m%d)T' -1
number=0
fname=$today.txt
while [ -e "$fname" ]; do
printf -v fname '%s-%02d.txt' "$today" "$(( ++number ))"
done
printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"
today
오늘 날짜를 얻으려면 카운터를 number
0으로 초기화하고 접미사가 붙은 날짜로 초기 파일 이름을 만듭니다 .txt
.
그런 다음 파일 이름이 이미 존재하는지 테스트합니다. 그렇다면 카운터를 늘리고 printf
. 더 이상 파일 이름 충돌이 없을 때까지 이 작업을 반복합니다.
printf
, 의 형식 문자열은 %s-%02d.txt
"문자열, 대시, 0으로 채워진 두 자리 정수 및 문자열 .txt
"을 의미합니다. 문자열과 정수가 추가 인수로 제공됩니다 printf
.
-v fname
의 출력을 printf
변수에 넣습니다 fname
.
단지 touch
테스트를 위해서입니다.
그러면 다음과 같은 파일 이름이 생성됩니다.
20170125.txt
20170125-01.txt
20170125-02.txt
20170125-03.txt
후속 실행을 기다립니다.
답변2
당신은 그것을 사용할 수 있습니다 seq
. 다양한 방법으로 번호 매기기 순서를 만들 수 있지만 총 파일 수를 알아야 합니다.
예: 이것을 시도해 볼 수 있습니다 seq -w 1 10
. 그러면 for 루프에 포함할 수 있는 01
시퀀스가 생성됩니다 .10
for i in `seq -w 1 10`
do
touch `date +%Y%m%d`-$i.txt
done
최근 질문에 대한 부록이 업데이트되었습니다.
원하는 것을 쉽게 달성하려면 -0
. 후속 실행에서는 파일 목록을 가져온 다음 sort
마지막 파일에서 마지막 파일을 추출하고 번호를 가져와서 증가시킨 다음 해당 번호로 새 파일을 만들어야 합니다.cut
-
하지만 채우기에는 여전히 약간의 작업이 필요합니다.
답변3
그것은 마치 ...
#!/bin/bash
DATE=$(date +%Y%m%d)
filename="${DATE}.txt"
num=0
while [ -f $filename ]; do
num=$(( $num + 1 ))
filename="${DATE}-${num}.txt"
done
touch $filename
...작동해야 합니다. 이렇게 하면 DATE-1.txt, DATE-2.txt, DATE-3.txt, ..., DATE-10.txt, DATE-11.txt 등의 형식으로 파일 이름이 생성됩니다. DATE-01.txt 등으로 변경하는 것은 독자의 연습 과제로 남겨둡니다 :)
또한 동시에 여러 번 스크립트를 호출하지 않도록 해야 합니다. 그렇지 않으면 여러 스크립트가 수정하는 일이 발생하게 됩니다.
참고 사항: 여러 버전의 파일을 관리할 수 있는 소프트웨어가 많이 있습니다. 이를 "버전 제어 시스템"(VCS) 또는 "소스 코드 제어 관리"(SCM)라고 합니다. Git과 Subversion은 매우 인기가 있습니다. 직접 다시 구현하기보다는 확인해 보는 것이 좋습니다. :-)
답변4
카운터 값이 이미 환경 변수에 있는 경우 Bash 산술을 사용하여 파일 이름을 생성할 수 있습니다.... $(( ctr+=1 )) 는 ctr 값을 증가시키고 파일 이름 문자열의 값을 대체합니다.
$ ctr=0
$ touch file-$(( ctr+=1 ))-name.txt
$ touch file-$(( ctr+=1 ))-name.txt
$ touch file-$(( ctr+=1 ))-name.txt
$ touch file-$(( ctr+=1 ))-name.txt
$ ls
file-1-name.txt file-2-name.txt file-3-name.txt file-4-name.txt