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