Com apenas ferramentas POSIX (e o HP-UX não tem muito mais do que isso), isso é difícil, porque não há uma maneira conveniente de obter o tempo de modificação de um arquivo. Com ls -l
, você precisa lidar com dois casos: arquivos recentes com mês, dia, casa e minuto e arquivos antigos (> 6 meses) com mês, dia e ano. (Pode haver uma maneira mais fácil de criar configurações de localidade apropriadas, mas não sei se isso pode ser feito no 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
Se você estiver usando uma versão antiga do HP-UX em que /bin/sh
é um shell Bourne antigo, talvez seja necessário substituir /bin/sh
na linha shebang pelo caminho para um shell POSIX, como ksh.