Делать это правильно из ls
неудобно, потому что формат даты меняется с возрастом файлов. Более того, вычисление для $ M
подозрительно, поскольку ls
обычно возвращает имя месяца, а не число. Предположительно OP использует команду date
, чтобы попытаться обойти различия в формате даты ls
, но это означает, что все файлы получат одно и то же значение в течение года.
Однако вопрос OP сосредоточен на ведущих нулях. Эта часть проста в awk
:
D=$(ls -ltr $line | awk '{printf "%02d", $7}')
M=$(ls -ltr $line | awk '{printf "%02d", $6}')
Y=$(date +"%Y")
Если бы мне пришлось сделать это в HPUX, я бы посмотрел на использование Perl (который предустановлен), так как это поможет избежать проблем с ls
и формат даты.
Вот краткий пример ( man perlfunc
- с чего начать):
#!/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;
Я проверил сценарий с двумя операторами printf
без комментариев и просмотрел файлы примеров. Вы могли бы вызвать этот сценарий только с одним именем файла (для нескольких имен файлов отсутствие форматирования было бы неприятностью).
используйте pgrep для поиска таких процессов:
if pgrep fbi; then
echo "already running"
else
/usr/bin/fbi -T 1 -noverbose -a /etc/splash/splashscreen.png
fi
или, что проще,
pgrep fbi || /usr/bin/fbi -T 1 -noverbose -a /etc/splash/splashscreen.png
Вы можете использовать pkill -0
вместо pgrep