단 하나의 명령으로 /tmp/와 같은 디렉토리에 요일(예: 월요일, 화요일, ...토요일) 이름을 딴 디렉토리를 어떻게 만들 수 있습니까?
mkdir
date +%A
또는 다른 조합 과 같습니다 .
mkdir -p /tmp/"$(date +%A)" ---> /tmp/Tuesday
명령은 실행 후 다음과 같아야 합니다.
/tmp/Monday
/tmp/Tuesday
.
.
.
/tmp/Saturday
스크립트가 아닌 단일 명령으로 이 작업을 수행하고 싶습니다.
답변1
다음 "명령"을 사용하여 원하는 결과를 얻을 수 있습니다.
for i in {1..7}; do mkdir /tmp/$(date +"%A" --date "$i days ago"); done
답변2
중괄호 확장을 사용할 수 있습니다.
mkdir -p /tmp/{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}
위의 내용은 다음과 동일합니다(이 역시 단일 명령입니다).
mkdir -p /tmp/Sunday /tmp/Monday /tmp/Tuesday /tmp/Wednesday /tmp/Thursday /tmp/Friday /tmp/Saturday
답변3
그리고 zsh
:
zmodload zsh/langinfo # if not already loaded
mkdir /tmp/${(v)^langinfo[(I)DAY_*]}
해당 지역의 날짜 이름을 사용합니다. 단일 명령으로:
zsh -c 'zmodload zsh/langinfo && mkdir /tmp/${(v)^langinfo[(I)DAY_*]}'
$langinfo
날짜 이름을 포함하여 일부 로케일 설정을 노출하는 특수 연관 배열입니다. 일치하는 배열 (예: , ...) $langinfo[(I)DAY_*]
의 키를 출력합니다 . 매개변수 확장 플래그를 사용하면 이러한 키의 값을 확장할 수 있습니다. 이러한 요소를 할당하여 , ...DAY_*
DAY_1
DAY_2
(v)
^
/tmp/value1
/tmp/value2
POSIX와 유사한 셸을 사용하면 다음을 수행할 수도 있습니다.
(cd /tmp && IFS=';' && set -o noglob && mkdir $(locale day))
locale day
;
현재 로캘의 날짜 이름을 구분된 목록으로 반환합니다 . $(...)
비활성화되면 분할+glob 연산자를 사용합니다(명령 대체를 따옴표로 묶지 않은 상태로 둡니다).전반적인 상황섹션( set -o noglob
) 및 조정나뉘다;
( ) 분할할 부분입니다 IFS=';'
.