web-dev-qa-db-ja.com

日付順

元の:

 2011年1月23日10:42 SOMETHING 2007.12.20.avi 
 2009年6月26日SOMETHING 2009.06.25.avi 
 2010年2月12日SOMETHING 2010.02.11.avi 
 2011年1月29日09:17 SOMETHING 2011.01.27.avi 
 2011年2月11日20:06 SOMETHING 2011.02.10.avi 
 2011年2月27日23:05 SOMETHING 2011.02.24.avi 

出力:

 2011年2月27日23:05 SOMETHING 2011.02.24.avi 
 2011年2月11日20:06 SOMETHING 2011.02.10.avi 
 2011年1月29日09:17 SOMETHING 2011.01.27。 avi 
 2011年1月23日10:42 SOMETHING 2007.12.20.avi 
 Feb 12 2010 SOMETHING 2010.02.11.avi 
 2009年6月26日SOMETHING 2009.06.25.avi 

上記のリスト(オリジナル)を生成しました:

ls -A -lR | grep "^-" | sed "s/.\{43\}/&\n/" | grep -v "^-" | while read ONELINE; do if echo $ONELINE | cut -d " " -f3 | grep -o '[0-9][0-9]:[0-9][0-9]' > /dev/null 2>&1; then echo $ONELINE | sed "s/.\{7\}/&$(date +%Y) /"; else echo $ONELINE; fi; done

最新のファイルが一番上にある出力を取得するにはどうすればよいですか?

17
LanceBaynes

ほとんどのユニスでは、lsには-tオプション。私のDebianボックスのmanページから:

-t変更時刻で並べ替え

次のコマンドを試してください。

$ ls -lt

21

ソートしようとしているのはテキストファイルですか、それともディレクトリリストを日付順に表示しようとしているのですか?後者の場合、 -tフラグをls に変更します。前者については、特に-MフラグをGNU並べ替え、3文字の月名の省略形で並べ替えます。次のコマンドは、3番目、1番目、2番目、4番目の列で並べ替え、2番目の並べ替えキーを月名として扱います。

sort -k 3 -k 1M -k2 -k4 in.txt

常に日本語/ ISOスタイルの日付を常にYYYY-MM-DD-HH-MM-SSの順序で使用することを検討してください(つまり、最初に最も重要な、一定の列幅)。このように、日付によるソートは、辞書式ソートと同じです。

元の質問が尋ねられたときに機能がlsコマンドに含まれていたかどうかはわかりませんが、オプション--full-timeを使用できるようになりました。

例えば。、

ls -t --full-time 

一番古いものから順に並べ替えます。または使用する場合:

ls -tr --full-time

次に、順序を逆にします。

3
Bevan Thomas