연중 매주 폴더를 생성하는 bash 스크립트를 어떻게 생성할 수 있습니까?

연중 매주 폴더를 생성하는 bash 스크립트를 어떻게 생성할 수 있습니까?

폴더 이름이 해당 주의 월요일 날짜인 매주 폴더를 만들고 싶습니다.

예를 들어, 이번 주부터 다음 주는 02-22 03-01 03-08 03-15입니다.

답변1

#!/bin/bash
   
for n in {1..52};
do
     mkdir $(date -d"$n+monday" +%m-%d)
done

산출:

03-01

03-08

03-15

등.

그러면 다음 52주 동안 매주 월요일의 월과 일자가 인쇄되지만 원하는 주 수로 쉽게 변경할 수 있습니다.

답변2

더 짧게 만들 수도 있지만 제 목표는 너무 짧지 않고 더 소화하기 쉽게 만드는 것입니다. 또한 다음 해의 월요일이 아닌 특정 연도의 모든 월요일을 원하고 GNU 시스템을 사용하고 있거나 최소한 dateGNU 셸 외부에서 GNU 구현에 액세스할 수 있다고 가정합니다.

#!/bin/bash

year="${1}"

if [[ "${year}" = "" ]]; then
    # Default the year to this year
    year="$(date +"%Y")"
fi

# What day of the week is January 1 of the given year?
readonly jan_one_day_of_week="$(date -d ${year}-01-01 +"%a")"

# Based on what day January 1 is, figure out when the first Monday is
case "${jan_one_day_of_week}" in
"Mon") day=1 ;;
"Tue") day=7 ;;
"Wed") day=6 ;;
"Thu") day=5 ;;
"Fri") day=4 ;;
"Sat") day=3 ;;
"Sun") day=2 ;;
*)
    echo 1>&2 "Unexpected day of the week: ${jan_one_day_of_week}"
    exit 1
esac

# Start printing each Monday until the next Monday we encounter isn't in
# the same year.
week=0
while [[ "$(date -d "${year}-01-0${day} + ${week} weeks" +%Y)" = "${year}" ]]; do
    date -d "${year}-01-0${day} + ${week} weeks" +"%m-%d"
    week=$((week + 1))
done

연도 매개변수를 전달하면 해당 연도의 월요일이 인쇄됩니다. 매개변수를 제공하지 않으면 올해로 간주됩니다.

출력은 다음과 같습니다.

$ ./ex.sh
01-04
01-11
01-18
01-25
...
12-06
12-13
12-20
12-27

답변3

date 명령을 사용할 수 있습니다.

$ mkdir $(date +"%d-%m-%Y")

예제 출력:

27-02-2021

그런 다음 cron 작업을 사용하여 일주일에 한 번 이 명령을 실행할 수 있습니다. 예를 들어 매주 월요일 오전 6시에 이 명령을 실행합니다.

답변4

%Y-%m-%d특정 연도의 모든 월요일에 대한 날짜 형식을 얻으려면 다음을 수행할 수 있습니다.

year=2021 ksh93 -c '
  printf "%(%F)T\n" {1..53}"th Monday in January $year" |
    grep "^$year"'

(어떤 해에는 52개의 월요일이 있고 어떤 해에는 53개의 월요일이 있습니다.)

형식을 가져오고 %m-%d각 파일에 대한 디렉터리를 만들려면 해당 출력을 cut -d- -f2- | xargs mkdir.

%Y/%m-%d다음 300번의 월요일(오늘이 월요일인 경우 오늘 포함)로 형식이 지정된 디렉터리를 생성하려면 다음을 수행합니다.

ksh93 -c 'printf "%(%Y/%m-%d)T\n" +{0..299}Monday' | xargs mkdir -p

관련 정보