一度は日付ごとに、もう一度はその日付内のファイル名の一部に基づいて2回ソートする必要がある300を超えるファイルがあります。
名前の唯一の基準はで終わることです*mmddyyyy<time stamp>.csv
。ここで、ファイル名の最初の部分には何でも含めることができます。日付ソート機能があることを知っていますが、ls -ltr
最後のキー定義の一部をキャプチャしてソートできないようです。
答え1
ファイル名が最後に表示されるときに予測可能な形式(拡張子、時刻、日付)を持つことを考慮すると、この事実を利用して次のコマンドを使用できます。
ls -1 | rev | sort -t '~' -k1.14,1.14 -k1.13,1.13 -k1.12,1.12 -k1.11,1.11 -k1.18,1.18 -k1.17,1.17 -k1.16,1.16 -k1.15,1.15 | rev
説明:
- 必要な形式にアクセスできるように、ファイル名が最初に反転されます。
- 次に、結果は必要に応じて文字でソートされます。
- - 文字11〜14は年です(逆順)
- - 文字17〜18月(逆順)
- - 15〜16文字は日(逆順)
- 最後に別の反転が発生し、元の名前で表示されます。
フルファイル名を単一のフィールドに結合するために区切り記号としてチルダを使用しましたが、~
別の区切り記号を使用するか(ファイル名に絶対に表示されない文字である必要があります)、.
ファイル名を結合するために(ドット)のみを使用できます。 2番目の質問に対して並べ替える別の部分を指定できるように、複数のフィールドに分割されています(対応する番号が常に同じ場合)。