Shell-Script
從日期獲取日期,在 1 到 9 位中附加 0
我正在使用 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
,並查看了範例文件。你可以只用一個文件名來呼叫這個腳本(對於多個文件名,缺少格式會很麻煩)。