Fazendo isso corretamente de ls
é complicado porque o formato de data muda com a idade dos arquivos. Além disso, o cálculo para $M
é suspeito, pois ls
normalmente retorna um nome para o mês em vez de um número. Presumivelmente, OP está usando o comando date
para tentar contornar as diferenças no formato ls
date, mas isso significa que todos os arquivos receberão o mesmo valor por um ano.
No entanto, a questão do OP está focada em zeros iniciais. Essa parte é fácil em awk
:
D=$(ls -ltr $line | awk '{printf "%02d", $7}')
M=$(ls -ltr $line | awk '{printf "%02d", $6}')
Y=$(date +"%Y")
Se eu tivesse que fazer isso no HPUX, procuraria usar o Perl (que é pré-instalado), pois isso pode evitar problemas com ls
e formato de data.
Aqui está um exemplo rápido ( man perlfunc
é onde começar):
#!/usr/bin/perl -w
use strict;
for my $n ( 0 .. $#ARGV ) {
my (
$dev, $ino, $mode, $nlink, $uid, $gid, $rdev,
$size, $atime, $mtime, $ctime, $blksize, $blocks
) = stat( $ARGV[$n] );
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
localtime($mtime);
# printf "%s:", $ARGV[$n];
printf "%04d%02d%02d", 1900 + $year, 1 + $mon, $mday;
# printf "\n";
}
1;
Eu verifiquei o script com as duas instruções printf
descomentadas e observando os arquivos de amostra. Você chamaria esse script com apenas um nome de arquivo (para vários nomes de arquivos, a falta de formatação seria um incômodo).