2017-04-05 15 views
1

4_4_201703140220_4_201703150220などの名前のディレクトリがあります。最初の数字はディレクトリIDで、末尾の数字はISO標準の日付文字列です。これらはJenkinsによって使用されていますが、おそらくここでは関係ありません。Linuxで最新のディレクトリを日付で取得する方法は?

は、ここでのサンプルリストです:

_41_20170322145757/ 
_41_20170323110416/ 
_41_20170323110720/ 
_42_20170322095600/ 
_42_20170322103112/ 
_42_20170324120233/ 

すべてのディレクトリが同じデータの修正を含んでいるが、私は、各IDの最新知りたいです。上記の場合、これは_41_20170323110720/_42_20170324120233/となります。

各IDの最新のディレクトリのリストを取得するための簡単なコマンドはありますか?または、pythonファイルも同様に動作します。

+1

になります。これは正しい集計ですか?また、これはUnix端末であると仮定できますか? –

+0

OOps申し訳ありません..しかし、あなたはそれを手に入れました。編集のために –

+0

それ以外の場合、ディレクトリのタイムスタンプも日付順に書かれていると仮定すると、これはあなたが望むことを行います。https://unix.stackexchange.com/questions/136976/get最新のディレクトリではない最新のファイル 'ls -td - * | head -n 1'これは、ファイル名ではなくタイムスタンプでディレクトリをソートし、リストの最初のものを取得します。 – ti7

答えて

0

私は自分自身がモンスターを作成していますが、唯一そのフォームで、それの最後に最新の日付を持つファイルをしたい、このPythonの式は、あなたが欲しいものを行う必要がありますと仮定した:

python -c "import os; print max(((x, x.split('_')[-1]) for x in os.listdir('.')), key=lambda x: x[1])[0]" 

説明

os.listdirs('.')ジェネレータ式を作成して現在のパス

(x for x in y)内のすべてのディレクトリを取得します

.split('_')[-1]スプリット各ディレクトリ_上の名前とはこれは、私たちは「赤」「青」よりも大きい場合に伝えるための機能を利用することを可能にする特殊なキー
に基づいて最大値を見つける最後の部分

max(<whatever>, key=value)を取ります[1, 'r', 3, 'z', 'b']を含むリストについて
、それは位置1の要素が返される反復可能(我々が通過捜すことができるリスト)の一部のみを返す

lambda x: x[1](ラムダと呼ばれる)inlinefunctionを作成し、'r'

"最大"日付を見つけるためにこれを使用します。これは、あなたのスキームで最も最近の日付(201703150220が201603150220より大きい場合)に便利です。

max()、その後は完全なファイル名と私たちは
"_4_201703150220"が続い[0]インデックスが返されるタプル(ファイル名)の最初の値を取得取っ("_4_201703150220", "201703150220")

なっ一致することを試みた日付を含むタプルを返します。
("_4_201703150220", "201703150220")[0]場合には、末尾に追加数字は日付文字列で、ポスターは、最新の日付に対応するディレクトリのみを望んでいる誰もここに明らかにされていませんので、あなたは、言及することを怠っ"_4_201703150220"

+0

これはケースでのみ機能します。私は最近、ご質問を編集しています。ありがとうございます。 –

+0

あなたの最初の質問とは多少異なります。毎日の最新のディレクトリだけを維持しようとしていますか? – ti7

+0

は毎日ではありませんが、Uを考慮することができます。下線の間の数字はIDです –

関連する問題