ディレクトリ内のすべてのファイルを一覧表示する方法はありますか?木単一のリストで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
。
答え2
そしてzsh
:
print -rl -- **/*(D.om)
**/*すべてのレベルのサブディレクトリと一致します(シンボリックリンクに従わない)。D.
修飾子は通常のファイルをリストし、om
変更時間に基づいて最新のファイルからソートします。
ディレクトリ部分なしでファイル名を一覧表示するには、t
履歴修飾子を追加します。
print -rl -- **/*(D.om:t)
答え3
まあ、何千ものファイルについて話し、ARG_MAX
制限を超えた場合、結果はあまり良くありませんが、最も簡単な解決策は次のとおりです。
find . ! -type d -exec ls -t {} +
...見つかったすべてのファイルバッチを呼び出しますls
。<=ARG_MAX
さらに、パス名の文字には任意の制限はなく、一緒に処理できる最大パラメータ数にのみ制限があります。
find
の出力と同じ方法で出力を作成します。もちろん、-l
GNUのような他のオプションも使用できます-h
。以下は、私が一週間前に作った小さなツリーにリストされています。
find . ! -type d -exec ls -lht {} +
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir/dir1/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir/dir2/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir/dir3/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir2/dir1/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir2/dir2/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir2/dir3/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir/file1
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir/file2
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir/file3
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir2/file1
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir2/file2
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir2/file3
...明らかにディレクトリごとにグループ化されていません。
私のコンピュータで...
getconf ARG_MAX
2091752
...しかし、それは現実的ではないと思います。平均65万ウォン程度になると思います。