ファイルのリストをファイル名と変更日で並べ替えるには?

ファイルのリストをファイル名と変更日で並べ替えるには?

00、01、...で始まるファイル名がありますが、同じ番号を持つ複数のファイル名があります(例:00_filename1、00_filename2)。名前で並べ替えて一覧表示したいのですが、同じ開始番号を持つファイルがあれば、変更日ごとに降順で並べ替えたいと思います。

だからこれの代わりに:

Oct 31 19:05 00_trash
Oct 31 19:14 00_trash_00
Oct 31 18:57 01_creating_dirs.py
Oct 31 19:05 01_trash
Oct 31 16:20 02_creating_csv.py
Oct 31 19:22 02_renaming_files.sh
Oct 31 16:20 03_creating_db.py
Oct 31 19:06 03_trash
Oct 31 16:21 04_importing_csv_to_db.py
Oct 31 16:20 05_some_xl.py
Oct 31 16:22 06_regex.py

私は次のようにソートしたいと思います:

Oct 31 19:14 00_trash_00
Oct 31 19:05 00_trash
Oct 31 19:05 01_trash
Oct 31 18:57 01_creating_dirs.py
Oct 31 19:22 02_renaming_files.sh
Oct 31 16:20 02_creating_csv.py
Oct 31 19:06 03_trash
Oct 31 16:20 03_creating_db.py
Oct 31 16:21 04_importing_csv_to_db.py
Oct 31 16:20 05_some_xl.py
Oct 31 16:22 06_regex.py

ls(パラメータ-tと使用-r)とsort(パラメータの使用-kn,m-n,m列範囲の指定 - と)を組み合わせようとしましたが、-r数時間検索して試行しても成功しませんでした。

答え1

GNUユーティリティを使用して、

ls -1t | sort -nst '_' -k 1,1
  • ls -1t修正時間ごとにソートし、1行に1ファイルずつ出力します。

  • sort:

    • -n: 数値ソートを実行し、
    • -t '_':フィールド区切り文字としてアンダースコアを使用します。
    • -k 1,1:最初のフィールドを並べ替えます(たとえば、最初の下線の前の2桁)。
    • -s:安定した位置合わせを行います。つまり、2 行の最初のフィールドが同じ場合、次のフィールドを使用してソートしません。

長いリスト形式の出力を好む場合

ls -lt | sort -nsk 9.2

キーの意味9.2は、9番目のフィールドの最初の2文字だけを並べ替えることです。

私はこれが単に可視化のためのものであると仮定しています。分析するls深刻なスクリプトの一部にならないでください。

関連情報