Shell-Script

從日期獲取日期,在 1 到 9 位中附加 0

  • April 11, 2016

我正在使用 awk 命令獲取文件的創建日期,並從中獲取日、月和年,但是對於 1-9 位數字,我得到的輸出類似於2016041,但我想要輸出20160401

D=$(ls -ltr $line | awk '{print $7}') 

M=$(ls -ltr $line | awk '{print $6}')

Y=$(date +"%Y")

TEMP2="$Y$M$D"

正確執行此ls操作很尷尬,因為日期格式會隨著文件的使用時間而變化。此外,由於通常返回月份的名稱而不是數字,因此計算 for$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,並查看了範例文件。你可以只用一個文件名來呼叫這個腳本(對於多個文件名,缺少格式會很麻煩)。

引用自:https://unix.stackexchange.com/questions/275549