ディレクトリ内のすべてのファイルを一覧表示する方法はありますか?木単一のリストでLinuxの修正時間に基づいてソートしますか?
ls -Rlt
ファイルは繰り返し表示されますが、出力では異なるフォルダにグループ化されているため、出力は全体的に並べ替えられません。ただ、各ディレクトリの内容が時間ごとにソートされているだけです。
ベストアンサー1
はい、GNUを使用してこれを行うことができますfind
。ファイル名に改行文字が含まれていない場合は、次のことができます。
find -printf '%T@ %p\n' | sort -gk1,1
説明する
オプションでさまざまな情報を印刷
-printf
できます。find
この例では、次を使用します。%Tk File's last modification time in the format specified by k, which is the same as for %A. @ seconds since Jan. 1, 1970, 00:00 GMT, with fractional part. %p File's name.
したがって、
%T@ %p\n
エポック以降のファイル修正時間(秒単位%T@
)、スペース、ファイル名(%p
)が印刷されます。次に、最初のフィールド()のみが数値
sort
でソートされた()オブジェクトに渡されます。-n
-k1,1
これにより、すべてのファイルとディレクトリが返されます。通常のファイル(ディレクトリ、デバイスファイル、リンクなどを除く)のみに制限するには、コマンドに-type f
追加しますfind
。
人が読める日付を取得するには、GNUを使用して出力を処理できますdate
。
find -printf '%T@ %p\t\n' | sort -gk1,1 |
perl -lne 's/([^ ]*)//;chomp($i=`date -d \@$1`); print "$i $_"'
このperl
コマンドは、空白ではなく最初の文字列(日付)をGNUで処理されたとおりに置き換えますdate
。
改行文字を含むファイル名の場合、上記の操作は失敗します。改行を処理するには、次のようにします。
find -printf '%p\t%T@\0' | sort -zt$'\t' -nk2 | tr '\0' '\n'
find
代わりに、各ファイル名の末尾にaを出力することを除いて、これは同じです\0
。\n
GNUはsort
ヌルで区切られた出力を処理できるため、まだ正しくソートされます。最後のtr
コマンドは\0
再び\n
。