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
深刻なスクリプトの一部にならないでください。