検索出力で日付の形式と場所を変更する方法

検索出力で日付の形式と場所を変更する方法

次のコマンドがあるとしましょう。私のドライブで最近変更された20個のファイルのリストをパスと共に表示するように設定されています。

find -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | head -20

コマンドはうまく機能しますが、日付と時刻の形式にはミリ秒も表示されるため、情報が多すぎます。私の質問はそれを取り除く方法です。また、パスが左側に表示され、日付が右側に表示されるように印刷位置をどのように変更しますか?

答え1

次のことができます。

find -type f -printf '%TY-%Tm-%Td %.8TT %p\n' | sort -r | sed -r 's/(^[^ ]+ [^ ]+) (.+)/\2 \1/' | head -20

との間に配置すると、フィールドは.88文字()に制限されるように変更されます。正規表現は、行の最初の部分(間に空白がある非空白文字セット)を行の末尾に移動します。時間はコマンドラインの先頭になければなりません。%TThh:mm:sssedsort

警告する:表示されたファイル名にスペースと数字が含まれている場合は、ファイル名の後に日付を置くと混乱を招く可能性があります。しかし、他のスクリプトやプログラムに入力するよりも人の観点から見ると、この出力は大丈夫でしょう。

それ以外の場合は、ファイル名の前に時間を保持してください。

find -type f -printf '%TY-%Tm-%Td %.8TT %p\n' | sort -r | head -20

編集する: sed@steeldriverの意見に応じて少数秒を切る必要はありません。これはGNU拡張かもしれませんが、-printfとにかくPOSIXではないようです。また、ソートエラーを修正しました。

関連情報