1970年1月1日以降、名前がミリ秒単位のタイムスタンプであるいくつかのディレクトリがあります。
1439715011728
1439793321429
1439879712214
.
.
次の出力が必要です。
1442039711 Sat Sep 12 08:35:11 CEST 2015
1442134211 Sun Sep 13 10:50:11 CEST 2015
1442212521 Mon Sep 14 08:35:21 CEST 2015
.
.
次のコマンドを使用すると、すべてのディレクトリを一覧表示できます。
find ./ -type d | cut -c 3-12
ただし、出力を次のコマンドに入れることはできず、date -d @xxxxxx
出力を操作することもできません。
どうすればいいですか?
ベストアンサー1
正しい方向に進んでいます(より簡単な解決策を見つけるには、2〜3つのコマンドを実行してください。以下を参照)。現在のディレクトリを削除する*
のではなく、ミリ秒をやや単純化する1を使用してから、./
結果をGNUparallel
またはxargs
2にパイプする必要があります。
find * -type d | cut -c 1-10 | parallel date --date=@{} +%c
得るために
Sat 12 Sep 2015 08:35:11 CEST
Sun 13 Sep 2015 10:50:11 CEST
Mon 14 Sep 2015 08:35:21 CEST
あなたの例のように、その前に秒オフセットを追加します。
find * -type d | cut -c 1-10 | parallel 'echo "{} " $(date --date=@{} +%c)'
または:
find * -type d | cut -c 1-10 | xargs -I{} bash -c 'echo "{} " $(date --date=@{} +%c)'
取得するには:
1442039711 Sat 12 Sep 2015 08:35:11 CEST
1442134211 Sun 13 Sep 2015 10:50:11 CEST
1442212521 Mon 14 Sep 2015 08:35:21 CEST
しかし、これを行う方が簡単です。
find * -type d -printf "@%.10f\n" | date -f - +'%s %c'
これにより、同じ要求出力が再提供されます。
使用の欠点は、拡張がコマンド*
ラインによって制限されることですが、タイムスタンプ値に基づいてディレクトリを並べ替えることができるという利点があります。ディレクトリ数が問題の場合はこれを使用してください-mindepth 1
。しかし、順序は失われます。
find ./ -mindepth 1 -type d -printf "@%.10f\n" | date -f - +'%s %c'
sort
必要に応じて挿入してください。
find ./ -mindepth 1 -type d -printf "@%.10f\n" | sort | date -f - +'%s %c'
1これは、あなたの例のように入れ子になったサブディレクトリがないと仮定します。./ -mindepth 1
*
@hobbsと@don_crisstiが提案したように、ここで実行できる²の代わりに
²を使用することもできます。これはより冗長です。³sファイル読み取り機能の使用に対するGillesの回答に基づいて
いますparallel
xargs -I{}
date