궁금해서 질문을 올렸는데, 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
사용할 수도 있습니다 .$langinfo
zsh/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[@]}"
)