ls 出力をファイル名の日付で逆順にソート

ls 出力をファイル名の日付で逆順にソート

以下を使用して、「通常の順序」で日付別にソートされた出力を生成できます。

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

結果:

2011年1月23日 10:42 何があったか 2007.12.20.avi
2009年6月26日何か2009.06.25.avi
2010年2月12日何か2010.02.11.avi
2011年1月29日09:17何が起こりましたか2011.01.27.avi
2011年2月11日 20:06 何があったか 2011.02.10.avi
2011年2月27日 23:05 何があったか 2011.02.24.avi

次のように、最新のファイルが一番上にある出力をどのように取得できますか?

2011年2月27日 23:05 何があったか 2011.02.24.avi
2011年2月11日 20:06 何があったか 2011.02.10.avi
2011年1月29日09:17何が起こりましたか2011.01.27.avi
2011年1月23日 10:42 何があったか 2007.12.20.avi
2010年2月12日何か2010.02.11.avi
2009年6月26日何か2009.06.25.avi

答え1

ほとんどのシングルマシンにはオプションがlsあります-tman私のDebianボックスページから:

-t 修正時間に基づいてソート

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

$ ls -lt

答え2

ソートしたいテキストファイルですか、それとも日付別にリストされたディレクトリを表示しますか?後者の場合、この-tフラグを使用してくださいls。前者の場合は、特に-M3文字の月名の略語でソートするGNUソートフラグを参照してください。次のコマンドは、3番目、1番目、2番目、4番目の列に基づいてソートし、2番目のソートキーを月名として扱います。

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

常にYYYY-MM-DD-HH-MM-SSの順に(つまり、最上位、一貫した列幅)、日本/ISOスタイルの日付を使用することをお勧めします。日付順のソートは事前ソートと同じです。

答え3

lsもともと質問を受けたとき、その機能がコマンドに含まれているかどうかはわかりませんが、オプションがあります--full-time

例えば、

ls -t --full-time 

以下の最も古い時系列でソートされます。または以下を使用する場合:

ls -tr --full-time

これにより順序が逆になります。

答え4

これにより、すべてのファイルが一覧表示されます。再帰的出力ls逆ソート渡す時間の変更(時間):

find -print0 -type f directory_path | xargs -0 ls -ltr

すばやく検索するには、次のコマンドを使用してください。fd

fd -0 -t f directory_path | xargs -0 ls -ltr

関連情報