월 이름만 포함하는 디렉터리 만들기

월 이름만 포함하는 디렉터리 만들기

궁금해서 질문을 올렸는데, 1월, 2월...~12월 같은 디렉토리를 만들고 싶어서 개별적으로 이름을 붙여서 만들었습니다. ( mkdir January February... etc.) 모든 월 이름을 포함하는 디렉토리나 파일 이름을 쉽게 만들 수 있습니까?

예: touch {1..10}10개의 파일 1,2,3...10이 쉽게 생성됩니다. 이와 같은 월 이름을 가진 파일이나 디렉터리를 생성하는 다른 솔루션이 있습니까?

답변1

POSIXly,

(IFS=';'; set -f; mkdir -- $(locale mon))

이는 현재 언어의 월 이름입니다. LC_ALL=C locale mon사용자의 언어와 관계없이 영어가 필요한 경우 로 바꾸세요.

Pass 를 사용하면 특수 연관 배열( 모듈에서) 을 zsh사용할 수도 있습니다 .$langinfozsh/langinfo

zmodload zsh/langinfo
eval mkdir -- '$langinfo[MON_'{1..12}']'

하지만

mkdir -- ${(s:;:)"$(locale mon)"}

더 짧아질 것입니다. rc/ 에는 Bourne과 같은 쉘의 전역 설정을 es통하지 않고 구분 기호를 지정하는 분할 연산자가 있는 다른 쉘이 있습니다 .$IFS

mkdir -- ``';'{locale mon}

답변2

개정하다Schimmel의 대본

for i in {1..12} ; do
   mkdir $(LC_TIME=C date +%B -d "${i}/15")
done

루프 없이

LC_TIME=C date +%B -f <(printf "%d/15\n" {1..12}) | xargs mkdir

답변3

다음과 같은 입력을 date허용하는 GNU의 루프 생성자를 사용할 수 있습니다 .+1 month+2 months

i=1; while ((i<=12)); do mkdir "$(date -d "+$i month" '+%B')"; ((i++)); done

예:

$ i=1; while ((i<=12)); do date -d "+$i month" '+%B'; ((i++)); done
September
October
November
December
January
February
March
April
May
June
July
August

답변4

로케일을 사용하고 Linux( locale(1)다른 시스템에서는 출력이 다름) 및 다음을 가정합니다 bash(1).

#! /bin/sh
(
    eval "$( locale -k -c LC_TIME | grep ^mon= )" || exit
    IFS=\; months=($mon)
    mkdir "${months[@]}"
)

관련 정보