/ / Unix:ファイルDateFormat - シェル、UNIX、solaris-10

Unix:File DateFormat - shell、unix、solaris-10

acdbaqa @ qaca010z:/ tmp / joelj> ls -lrt hl.sh -rwxrwxrwx 1 acdbaqa acdba 2210 7月13日20時07分 hl.sh

どのように私はに任意のファイルの日付形式を変換する YYYYMMDD:HHSS

回答:

回答№1は0

あなたの例では、2210は日付の一部であり(それはファイルサイズではない)、あなたの望むフォーマットは分を省いていると思うようです。もし両方とも意図しないもので、あなたが "GNU lsを使っているならば" その --time-style オプションはあなたが必要とすることをするべきです

ls -lrt --time-style="+%Y%m%d:%H%M%S"

あなたの例ではこれは多かれ少なかれこの結果を与えるでしょう:

-rwxrwxrwx   1 acdbaqa  acdba       2210 20170713:200700 hl.sh

回答№2の場合は0

私は "stat"コマンドを支持しますが、Ubuntuではそれを正しく行えません。 だからここに私の答えです。それはいくつかの文字列操作を行うためにperlを使っているので、どういうわけか回避策と考えられるかもしれません。

ls -lrt somefiles |perl -MDate::Manip -pe "s/^([-w]+ d+ w+ w+ d+ )(w+ +d+ +[:d]+)/$1.UnixDate(ParseDate($2),"%Y%m%d:%H%M")/e"

これは、%month%day%hour:%minuteの形式の日付文字列を認識し、それを目的の形式に変換します。

更新:これは2番目の日付フォーマットでも動作します ls 1年以上前のファイルに使用します(%month%day%year)。

ファイルに出力する:

-rwxrwxrwx 1 acdbaqa acdba 2210 20170713:2007 hl.sh

回答№3の場合は0

あなたが望むのは、ファイルの修正時刻だけではなく、 lsを使用することを検討してください stat コマンド:

stat -f %Sm -t %Y%m%d:%H%M%S hl.sh

これは、長い形式の日付/時刻形式です。これは、次のように省略することができます。 %F:%T.

あなたが持っていなければ stat、あなたは使用することができます perl

perl -MPOSIX -le "print(strftime "%Y%m%d:%H%M%S", localtime((stat "hl.sh")[9]))"

引用符や補間の問題を避けるために、コードの外側にファイル名を渡すことができます。

perl -MPOSIX -le "print(strftime "%Y%m%d:%H%M%S", localtime((stat $ARGV[0])[9]))" hl.sh