파일 수정 시간을 기준으로 디렉터리 이름을 만들고 싶습니다. 예를 들어 파일 생성 또는 수정 시간이 2016년 3월 17일 18:00:00이면 이름이 1703206
HP-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
foo
bar
,prefix
및 를suffix
실제/원하는 파일 이름으로 바꿉니다 .- 흥미로운 문자를 피하려면 var 주위에 따옴표를 사용하십시오.