임의의 디렉토리내의 파일명에 근거해 일련번호 파일을 작성하는 쉘 스크립트
5520 단어 ShellScript
저의 라이프 스타일적으로 MarkDown 파일을 만드는 빈도가 엄청 높습니다.
파일 이름을 수동으로 입력하는 것이 귀찮습니다.
MarkDown 파일을 만들 때마다 파일 이름을 수동으로 붙이고 있었지만, 다음과 같은 과제가 현저하게 나타났습니다.
라고 하는 것으로 임의의 디렉토리내의 파일명을 바탕으로 연속 번호 파일을 작성하는 쉘 스크립트를 만들어 자동화해 보고 싶습니다.
이번에 만들고 싶은 파일의 형식은 이쪽입니다.
「연월일 연번(3자리)-임의의 문자열」
자동화하는 것은 「연월일 연번(3자리수)」 부분입니다.
요구사항
날짜는 로컬 날짜와 시간
date=`date '+%Y%m%d'`
# 出力例 : 20200922
date 함수를 사용하여 날짜 문자열을 만듭니다. 개인적으로 서식을 처음
+
잊어 버리기 쉽습니다.지정된 디렉토리에 파일 이름 목록 작성
이번 검색 대상은
drafts/
디렉토리내 및 MarkDown 파일만입니다.# draftsディレクトリ内を検索
dir='drafts/'
# 検索対象
target="$dir*.md"
# find関数で検索ファイルパスのリストを作成
files=`find $target -type f -maxdepth 0 -name $date*`
find 함수를 사용하여 지정한 검색할 파일 경로 목록을 가져옵니다.
find 함수의 보충 설명
-type f
-type
선택적으로 파일을 검색합니다. (폴더는 대상에서 제외)-maxdepth 0
-maxdepth 0
선택적으로 하위 폴더가 검색되지 않습니다.-name $date*
-name
선택적으로 파일 이름 규칙을 추가하여 필터링합니다.이제 파일 변수에 지정된 날짜의 MarkDown 파일 경로 목록이 저장되었습니다.
일련 번호 만들기
예 :
drafts/20200922004-hogehoge
이 "004"의 부분. 문자열 15번째부터 세 개의 문자열을 추출합니다.
# 作成済み連番の最大値
max_serial=0
for filepath in $files;
do
# 連番情報を抽出する
serial_num_str=`echo ${filepath:15:3}`
# 文字列を数字にキャスト
serial_num=$(expr $serial_num_str)
# 連番の最大値を保持
if [ $max_serial -lt $serial_num ];then
max_serial=$serial_num
fi
done
파일 이름의 일련 번호를 추출하여 최대값을 가져옵니다.
문자열을 숫자로 캐스팅하여 비교
캐릭터 라인의 그대로라면 수치의 비교는 할 수 없기 때문에, 수치에 캐스트 합니다.
serial_num=$(expr $serial_num_str)
이 부분에서 문자열(예:012)을 숫자(12)로 캐스팅하고 있습니다.
if [ $max_serial -lt $serial_num ];then
-lt
를 사용하여 비교하고 있습니다. if [ A -lt B ]
A가 B보다 작으면 max_serial을 갱신합니다.일련 번호를 증가시켜 파일 생성
new_id=$(expr $max_serial + 1)
이전의 캐스트 처리를 사용해 사용하는 일련번호를 결정합니다.
세 자리에 0 채우기
new_num=`printf %03d $new_id`
printf 함수에 인수로 형식(
%03d
)을 지정하고 필요한 경우 0으로 채웁니다.예: 12 -> 012
마지막으로
아래의 gif 애니메이션에서는 알기 힘들지만, 쉘을 실행할 때마다 일련 번호 파일이 작성되게 되었습니다.
이것으로 기술 메모할 때의 MarkDown 작성의 스트레스가 줄어들 것 같습니다.
모든 소스는 이쪽으로 올라갑니다.
참고 사이트
Reference
이 문제에 관하여(임의의 디렉토리내의 파일명에 근거해 일련번호 파일을 작성하는 쉘 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ohbashunsuke/items/979af1616f685314418f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)