파일 수정 시간의 이름을 딴 디렉터리 생성

파일 수정 시간의 이름을 딴 디렉터리 생성

파일 수정 시간을 기준으로 디렉터리 이름을 만들고 싶습니다. 예를 들어 파일 생성 또는 수정 시간이 2016년 3월 17일 18:00:00이면 이름이 1703206HP-UX인 파일을 생성하려고 합니다.

답변1

POSIX 도구(HP-UX에는 더 이상 없음)만 사용하면 파일 수정 시간을 얻을 수 있는 편리한 방법이 없기 때문에 어렵습니다. 를 사용할 때 ls -l월, 일, 집, 분을 포함하는 최근 파일과 월, 일, 연도를 포함하는 이전 파일(>6개월)이라는 두 가지 사례를 처리해야 합니다. (적절한 로케일을 만드는 더 쉬운 방법이 있을 수 있지만 HP-UX에서 가능한지는 모르겠습니다.)

#!/bin/sh
set -e -f
set -- $(LC_ALL=C ls -dlog -- "$1")
# $1=permissions $2=link_count $3=size $4,$5,$6=date_time $7...=filename
case $4 in
  Jan) month=1;;
  Feb) month=2;;
  Mar) month=3;;
  Apr) month=4;;
  May) month=5;;
  Jun) month=6;;
  Jul) month=7;;
  Aug) month=8;;
  Sep) month=9;;
  Oct) month=10;;
  Nov) month=11;;
  Dec) month=12;;
esac
case $6 in
  *:*) # The timestamp is within the last 6 month, so
       # the year is the current or previous year.
    current_month=$(LC_ALL=C date +%Y%m)
    year=${current_month%??}
    current_month=${current_month#????}
    case $current_month in 0*) current_month=${current_month#0};; esac
    if [ $current_month -lt $month ]; then year=$((year-1)); fi;;
  *) year=$6;;
esac
if [ $month -le 9 ]; then month=0$month; fi
day=$5
if [ $day -le 9 ]; then day=0$day; fi
mkdir $year$month$day

이전 Bourne 셸이 포함된 이전 버전의 HP-UX를 사용하는 경우 shebang 줄을 POSIX 셸(예: ksh) 경로로 바꿔야 /bin/sh할 수도 있습니다 ./bin/sh

답변2

Linux에서 foo파일이

stat -c %Z foo

에포크 이후 초를 제공합니다. (참조 , , , 을 man stat사용하여 생성 시간, 액세스 시간, 수정 시간, 변경 시간을 나타낼 수 있음)%W%X%Y%Z

date --date=@$(stat -c %Z foo) +%m%d%y

형식을 알려드립니다.

그래서

 mkdir bar/prefix$(date --date=@$(stat -c %Z foo) +%m%d%y)suffix
  • foobar, prefix및 를 suffix실제/원하는 파일 이름으로 바꿉니다 .
  • 흥미로운 문자를 피하려면 var 주위에 따옴표를 사용하십시오.

관련 정보