web-dev-qa-db-ja.com

ディレクトリおよびサブディレクトリ内のすべてのファイルを新しい順にリストするにはどうすればよいですか?

ls -tのようなことをしたいのですが、サブディレクトリ内のファイルも含まれています。しかし問題は、出力がls -Rのようにフォーマットされたくないことです。これは次のようなものです。

[test]$ ls -Rt
b       testdir test

./testdir:
a

サブディレクトリ内のファイルを表示するfindコマンドのようにフォーマットしたいです。つまり:

[test]$ find .
.
./b
./test
./testdir
./testdir/a

ただし、findが実行していないように見えるのは、最終更新時刻順に結果を時間順に並べることです。

それでは、ディレクトリとサブディレクトリ内のすべてのファイルを、findと同じ形式で、ただし新しい順にリストする方法を教えてください。

54
dan

これを試してください:

find . -type f -printf "%T@ %p\n" | sort -nr | cut -d\  -f2-
37
marco

ls -lRは、ホームディレクトリ内のすべてのファイル、ディレクトリ、およびサブディレクトリを表示しますls -lR | moreは、フロー内のすべてのファイルを表示するために使用されます。

80
rashmi

表示するファイルの数が引数の最大制限内に収まる場合は、globstarを使用して必要なものを取得できます。globstarがサポートされている場合は再帰を使用できます。

正確に2つのレイヤーを深く使用する場合:ls -d * */*

Globstarで、再帰を使用する場合:ls -d **/*

ls-d引数は、引数として渡されたディレクトリを再帰しないように指示します(シェルグロビングを使用して再帰を行うため)。これにより、lsの再帰フォーマットが使用されなくなります。

12
Parakleta

find . -type dまたはfind . -type d -lsを試してください

3
Bobby
find -type f -print0 | xargs -0 ls -t

欠点:一定量のファイルに対してのみ機能します。非常に大量のファイルがある場合は、もっと複雑なものが必要です

3
yankee

これを試して:

ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total' |sed '/^$/d'
2
wfg5475

wfg5475's answer のコマンドは正常に機能しています。ディレクトリとサブディレクトリ内のファイルのみを表示するには、1つ追加するだけです。

ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total|^d' |sed '/^$/d'

1つ追加:^dリスト出力からすべてのディレクトリを無視する

1
Pankaj Tiwari