Bashでタイムスタンプを抽出してフォーマットする

Bashでタイムスタンプを抽出してフォーマットする

各ファイルのフルパスを含むファイルのリストを返すスクリプトがあります。たとえば - root/folder/file@1610565763436。だから出力は次のようになります

/root/folder/file@1610565763436
/root/folder/file@1610568241000
/root/folder/file@1610597041000
/root/folder/file@1610625841000
/root/folder/file@1610654641000
/root/folder/file@1610683441000
/root/folder/file@1610712242000
/root/folder/file@1610741041000
/root/folder/file@1610769841000
/root/folder/file@1610798641000
/root/folder/file@1610827441000
/root/folder/file@1610856241000
/root/folder/file@1610885041000
/root/folder/file@1610913841000

人間が読めるタイムスタンプだけが出力されるように出力形式を指定したいと思います。タイムスタンプを取得しようとしましたが、cut -d "@" -f 2xargsにパイプしてdateコマンドを実行しても機能しませんでした。つまり/bin/bash scriptToGetFiles | cut -d "@" -f 2 | xargs date -d {}

FWIW、上記のコマンドを実行するとxargs -tエラーが返されます。

date -d @ 1610565763436 1610568241000 1610597041000 1610625841000 1610654641000 1610683441000 1610712242000 1610741041000 1610769841000 1610798641000  
date: extra operand ‘1610568241000’

どんな提案やアドバイスにも感謝します。

ベストアンサー1

GNU日付を使用してください。

$ echo /root/folder/file@1610565763436 | cut -d@ -f2 | xargs -I '{}' echo {} / 1000  | bc  | xargs -I '{}' date --date=@{}
Wed Jan 13 20:22:43 CET 2021

FreeBSDから:

$ echo /root/folder/file@1610565763436 | cut -d@ -f2 | xargs -I '{}' echo {} / 1000  | bc  | xargs  date -r
Wed Jan 13 20:22:43 CET 2021 

おすすめ記事