하나의 라이너 mkdir을 사용하는 days라는 디렉토리?

하나의 라이너 mkdir을 사용하는 days라는 디렉토리?

단 하나의 명령으로 /tmp/와 같은 디렉토리에 요일(예: 월요일, 화요일, ...토요일) 이름을 딴 디렉토리를 어떻게 만들 수 있습니까?

mkdirdate +%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_1DAY_2(v)^/tmp/value1/tmp/value2

POSIX와 유사한 셸을 사용하면 다음을 수행할 수도 있습니다.

(cd /tmp && IFS=';' && set -o noglob && mkdir $(locale day))

locale day;현재 로캘의 날짜 이름을 구분된 목록으로 반환합니다 . $(...)비활성화되면 분할+glob 연산자를 사용합니다(명령 대체를 따옴표로 묶지 않은 상태로 둡니다).전반적인 상황섹션( set -o noglob) 및 조정나뉘다;( ) 분할할 부분입니다 IFS=';'.

관련 정보